Как избежать обратной косой черты в SQL-сервере - PullRequest
19 голосов
/ 26 мая 2011
DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a'\b'\c''
SELECT @Test
PRINT @Query
exec sp_executesql @Query

Я пытаюсь получить вывод как \ a \ b \ c.Возможно, указанная выше ошибка связана с тем, что я не могу экранировать символ \.

Ответы [ 3 ]

20 голосов
/ 26 мая 2011

Вам не нужно избегать обратной косой черты (только внутренние одинарные кавычки):

DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a\b\c''
SELECT @Test'
PRINT @Query
exec sp_executesql @Query
12 голосов
/ 04 ноября 2012

На самом деле есть одно место, где в SQL Server нужно экранировать (или, по крайней мере, обрабатывать) обратные слэши.

Когда обратная косая черта непосредственно предшествует новой строке в строковом литерале, удаляется как обратная косая черта, так и новая строка.

PRINT 'Foo\
Bar'

Возвращает

FooBar

Статья здесь указывает, что это особенность клиентских инструментов, а не самого TSQL, но я не верю, что это так, поскольку следующий код имеет тот же результат

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

Если вам действительно требуется строковый литерал с обратной косой чертой, за которой следует возврат каретки, вы можете удвоить их.

PRINT 'Foo\\

Bar'
0 голосов
/ 09 июля 2014

Если вы хотите проверить, попробуйте этот код:

выберите '\ a \ b \ c'

Нет необходимости экранировать символ обратной косой черты.Но проблема обратной косой черты плюс символа новой строки - проблема, и движок Sql Server просто обрезает ее.

Если вам нужно поставить одну кавычку в строке, вам нужно удвоить символ кавычки:

выберите 'test:' 'в кавычках' '- ok'

Надеюсь, я чем-нибудь помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...