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。上述错误可能是因为我无法转义\字符。
答案 0 :(得分:20)
您不需要转义反斜杠(只有内部单引号):
DECLARE @Query nvarchar(max)
SET @Query ='DECLARE @Test nvarchar(max)
SELECT @Test = ''\a\b\c''
SELECT @Test'
PRINT @Query
exec sp_executesql @Query
答案 1 :(得分:12)
实际上有一个地方需要在SQL Server中转义(或至少特别对待)反斜杠。
当反斜杠紧接在字符串文字中的新行之前时,反斜杠和新行都会被删除。
PRINT 'Foo\
Bar'
返回
FooBar
article here表示这是客户端工具的一个功能,而不是TSQL本身,但我不相信这是因为以下代码具有相同的结果
DECLARE @X VARCHAR(100) = 'PRINT ''Foo\' + CHAR(13) + CHAR(10) + 'Bar'' '
EXEC(@X)
如果你确实需要一个带有反斜杠后跟回车的字符串文字,你可以加倍。
PRINT 'Foo\\
Bar'
答案 2 :(得分:0)
如果你想测试试试这段代码:
选择' \ a \ b \ c'
没有必要逃避反斜杠字符。但反斜杠加换行字符的问题是一个问题,而Sql Server引擎只是将其删除了。
如果你需要在字符串上加一个引号,那么你需要加倍引号字符:
选择'测试:''在引号'' - 好的'
希望我能以某种方式帮助你。
答案 3 :(得分:0)
如果您使用的是SQL Server 2016或更高版本,则可以使用STRING_ESCAPE()使用转义序列强制转换这些字符串。
STRING_ESCAPE( text , type )