6
votes

SQL Escape ''

J'essaie d'exécuter une requête dans SQL 2008 en faisant:

@query varchar(max)

SET @query = 'SELECT * FROM Table WHERE [Name] = ' 'Karl' ' '

EXEC(@query)


2 commentaires

C'est SQL Server 2008, non? Not MySQL ou PostgreSQL ou SQLite ou l'une des autres variantes de SQL?


Que voyez-vous si vous imprimez la chaîne @query?


7 Réponses :


0
votes

faire comme ça Ensemble @query = 'Sélectionnez * à partir de la table où [Nom] =' '' 'Karl' '' '' ''


2 commentaires

Cela ne fonctionnera pas, à moins que Karl ne soit stocké dans la base de données avec une citation unique avant et après son nom comme «Karl», car il se traduit par la requête réelle: Sélectionnez * à partir de la table où [Nom] = '' Karl ''


thne ajoutez une citation de plus à la fin Faites ce que ceci set @query = 'Sélectionnez * à partir de la table où [Nom] =' '' '' Karl '' '' '' comme ça



-1
votes

Évapez simplement les apostrophes en utilisant la barre d'échappement \ comme ceci 'Sélectionnez * à partir de la table où [Nom] =' \ 'Karl \' ''

espère qu'il aide


0 commentaires

2
votes

Ceci fonctionne sur ma machine à partir de SQL Server Management Studio:

@query varchar(max)

SET @query = 'SELECT * FROM Table WHERE [Name] = ''''''Karl'''''''

EXEC(@query)


1 commentaires

Cela ne fonctionnera pas, à moins que Karl ne soit stocké dans la base de données avec deux guillemets simples avant et après son nom comme «Karl», car il en résulte la requête réelle: Sélectionnez * à partir de la table où [Nom] = '' Karl ' ''



3
votes

Il existe de plusieurs façons que vous puissiez échapper à des données de caractères dans SQL Server, certaines personnes défoncent même l'utilisation du quotename () fonctions.

Si vous voulez vraiment développer une solide compréhension de ce domaine, puis-je vous recommander de jeter un oeil à ce que les développeurs de serveurs SQL expérimentés considèrent comme une lecture essentielle en ce qui concerne les différentes méthodes que vous pouvez utiliser pour intégrer dynamique t- SQL dans votre codage.

La malédiction et les bénédictions de SQL dynamique


0 commentaires

2
votes

Essayez:

PRINT ''''     --will print a one single quote
PRINT ''''''   --will print two single quotes
PRINT 'can''t' --will print can't


0 commentaires

1
votes

Un double simple (''), une citation simple agira comme une seule citation unique lorsque vous êtes dans un littéral à chaîne.

Avez-vous essayé d'utiliser une variable? P>

declare @karl_name varchar(10);
set @karl_name = '''Karl''';

SELECT * FROM Table WHERE [Name] = @karl_name


0 commentaires

0
votes

Ceci fonctionne: xxx

sortie: xxx

mais si "karl" est un texte variable, il est fortement recommandé d'utiliser quelque chose comme cela à la place: xxx


0 commentaires