双引号可以用来分隔字符串吗?

Cha*_*adD 1 t-sql sql-server-2008

我很惊讶地遇到了一个使用双引号作为字符串分隔符的SQL 2008 T-SQL过程.例如:

DECLARE @SqlStmt AS VarChar(5000)
SET @SqlStmt = "ok"
PRINT @SqlStmt
Run Code Online (Sandbox Code Playgroud)

我不认为这是允许的.我以为只能使用撇号.

认为T-SQL像Javascript一样灵活,允许作为分隔符,以防你想在一个语句中混合两个,我试图在我的一个存储过程中做同样的事情,因为我想构建包含ticks的动态SQL.我很惊讶脚本无法编译,我得到一个"无效列[X]"错误,其中X是我引用的字符串的内容.

所以,我把它剥离到最简单的组件,直到我得到你上面看到的确切的SQL,编译,运行和打印"OK".

现在真正令人惊讶的部分:

我将T-SQL脚本放在我的剪贴板上,执行Control + N以使用相同的连接打开一个新的查询窗口并将上面的脚本粘贴到新的查询窗口中,并且震惊地看到我收到了以下错误新窗户:

Msg 207, Level 16, State 1, Line 3
Invalid column name 'ok'.
Run Code Online (Sandbox Code Playgroud)

说明更新:

显然我已经从原始脚本中删除了SET QUOTED_IDENTIFIER,但我已经在原始查询窗口中执行了它,但该选项仍然有效.当我创建一个新的查询窗口时,该选项默认重置为关闭.

谢谢你的回答.

Mar*_*ith 5

如果QUOTED_IDENTIFIER是,OFF则可以使用它们来分隔字符串.否则,双引号中的项将被解释为对象名.

始终使用单引号来分隔那些需要分隔的对象名称的字符串和方括号,以便在"错误"设置下运行时代码不会中断.