web-dev-qa-db-fra.com

Comment échapper à la barre oblique dans le serveur SQL

DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a'\b'\c''
SELECT @Test
PRINT @Query
exec sp_executesql @Query

J'essaie d'obtenir une sortie en tant que\a\b\c. L'erreur ci-dessus est probablement due au fait que je ne parviens pas à échapper au caractère \.

17
Ashish Gupta

Vous n'avez pas besoin d'échapper aux barres obliques inverses (uniquement les guillemets simples intérieurs):

DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a\b\c''
SELECT @Test'
PRINT @Query
exec sp_executesql @Query
19
Mitch Wheat

Il existe en fait un endroit où les barres obliques inversées doivent être masquées (ou au moins traitées spécialement) dans SQL Server.

Lorsqu'une barre oblique inverse précède immédiatement une nouvelle ligne dans un littéral chaîne, la barre oblique inverse et la nouvelle ligne sont supprimées.

PRINT 'Foo\
Bar'

Résultats 

FooBar

Le article here indique qu'il s'agit d'une fonctionnalité des outils clients plutôt que de TSQL, mais je ne crois pas que ce soit le cas, car le code suivant a le même résultat

DECLARE @X VARCHAR(100) = 'PRINT ''Foo\' + CHAR(13) + CHAR(10) + 'Bar'' '
EXEC(@X)

Si vous avez réellement besoin d'un littéral de chaîne avec une barre oblique inversée suivie de retours à la ligne, vous pouvez le doubler.

PRINT 'Foo\\

Bar'
10
Martin Smith

Si vous voulez tester, essayez ce code:

sélectionnez '\ a\b\c'

Il n'y a aucune nécessité d'échapper à la barre oblique inverse. Mais la question de la barre oblique inverse plus du caractère de nouvelle ligne est un problème et le moteur Sql Server le résout simplement.

Si vous devez mettre un guillemet simple sur la chaîne, vous devez alors doubler le caractère de guillemet:

sélectionnez 'test:' 'entre guillemets' '- ok'

J'espère que j'ai aidé d'une certaine manière.

0
Marquinho Peli