Как избежать косой черты на SQL-сервере

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. Вышеприведенная ошибка, вероятно, связана с тем, что я не могу избежать символа \.

Ответы

Ответ 1

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

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

Ответ 2

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

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

PRINT 'Foo\
Bar'

Возвращает

FooBar

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

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

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

PRINT 'Foo\\

Bar'

Ответ 3

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

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

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

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

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

Надеюсь, я кое-как помог.