我很惊讶遇到一个使用双引号作为字符串分隔符的SQL 2008 T-SQL过程。例如:
DECLARE @SqlStmt AS VarChar(5000)
SET @SqlStmt = "ok"
PRINT @SqlStmt
我认为不允许这样做。我以为只能使用撇号。
认为T-SQL像Javascript一样灵活,允许作为分隔符,以防你想在一个语句中混合两个,我试图在我的一个存储过程中做同样的事情因为我想构造动态SQL包括蜱虫。我很惊讶脚本无法编译,我得到一个“无效列[X]”错误,其中X是我引用的字符串的内容。
所以,我把它剥离到最简单的组件,直到我得到你上面看到的确切的SQL,编译,运行和打印“OK”。
现在真正令人惊讶的部分:
我将T-SQL脚本放在我的剪贴板上,执行Control + N以使用相同的连接打开一个新的查询窗口,并将上述脚本粘贴到新的查询窗口中,并且震惊地看到我得到了以下内容新窗口中的错误:
Msg 207, Level 16, State 1, Line 3
Invalid column name 'ok'.
说明更新:
显然我已经从原始脚本中删除了SET QUOTED_IDENTIFIER,但我已经在原始查询窗口中执行了它,但该选项仍然有效。当我创建一个新的查询窗口时,该选项默认重置为关闭。
感谢您的回答。
答案 0 :(得分:5)
如果QUOTED_IDENTIFIER
为OFF
,则可以使用它们来分隔字符串。否则,双引号中的项将被解释为对象名。
始终使用单引号来分隔那些需要分隔的对象名称的字符串和方括号,以便在“错误”设置下运行时代码不会中断。
答案 1 :(得分:1)
就像Martin Said一样,你可以这样使用。
SET QUOTED_IDENTIFIER OFF
BEGIN
DECLARE @SqlStmt AS VarChar(5000)
SET @SqlStmt = "ok"
PRINT @SqlStmt
END