问题描述
|
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:\'\'用引号\'\'-确定\'
希望我能以某种方式提供帮助。