Ответ 1
Вам не нужно скрывать обратную косую черту (только внутренние одинарные кавычки):
DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a\b\c''
SELECT @Test'
PRINT @Query
exec sp_executesql @Query
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. Вышеприведенная ошибка, вероятно, связана с тем, что я не могу избежать символа \.
Вам не нужно скрывать обратную косую черту (только внутренние одинарные кавычки):
DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a\b\c''
SELECT @Test'
PRINT @Query
exec sp_executesql @Query
На самом деле существует одно место, где обратные косые черты должны быть экранированы (или, по крайней мере, обработаны) в SQL Server.
Когда обратная косая черта сразу предшествует новой строке в строковом литерале, удаляются обратная косая черта и новая строка.
PRINT 'Foo\
Bar'
Возвращает
FooBar
здесь указывает, что это особенность клиентских инструментов, а не самого TSQL, но я не считаю, что это так так как следующий код имеет тот же результат
DECLARE @X VARCHAR(100) = 'PRINT ''Foo\' + CHAR(13) + CHAR(10) + 'Bar'' '
EXEC(@X)
Если вам действительно нужен строковый литерал с обратной косой чертой, сопровождаемой возвратом каретки, вы можете удвоить их.
PRINT 'Foo\\
Bar'
Если вы хотите протестировать, попробуйте этот код:
выберите '\ a\b\c'
Нет необходимости скрывать символ обратной косой черты. Но проблема обратной косой черты плюс символ новой строки - проблема, и механизм Sql Server просто вырезает ее.
Если вам нужно поставить одиночную кавычку в строку, вам нужно удвоить символ кавычки:
выберите 'test:' 'в кавычках' '- ok'
Надеюсь, я кое-как помог.