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

Tsql 双引号可以用来分隔字符串吗?,tsql,sql-server-2008,Tsql,Sql Server 2008,我很惊讶地遇到了使用双引号作为字符串分隔符的SQL2008T-SQL过程。例如: DECLARE @SqlStmt AS VarChar(5000) SET @SqlStmt = "ok" PRINT @SqlStmt 我认为这是不允许的。我以为只能用撇号 考虑到T-SQL与Javascript一样灵活,允许在一条语句中混合使用两者作为分隔符,我尝试在我的一个存储过程中使用相同的方法,因为我想构造包含记号的动态SQL。我很惊讶脚本无法编译,我得到了一个“INVALID COLUMN[X]”错误

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

DECLARE @SqlStmt AS VarChar(5000)
SET @SqlStmt = "ok"
PRINT @SqlStmt
我认为这是不允许的。我以为只能用撇号

考虑到T-SQL与Javascript一样灵活,允许在一条语句中混合使用两者作为分隔符,我尝试在我的一个存储过程中使用相同的方法,因为我想构造包含记号的动态SQL。我很惊讶脚本无法编译,我得到了一个“INVALID COLUMN[X]”错误,其中X是引用字符串的内容

所以,我把它精简为最简单的组件,直到我得到了您在上面看到的SQL,它编译、运行并打印“OK”

现在真正令人惊讶的是:

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

Msg 207, Level 16, State 1, Line 3
Invalid column name 'ok'.
最新解释:

显然,我已经从原始脚本中删除了SET-QUOTED_标识符,但是我已经在原始查询窗口中执行了它,但是该选项仍然有效。当我创建一个新的查询窗口时,默认情况下该选项被重置为关闭

感谢您的回答。

如果禁用了
,则可以使用它们来分隔字符串。否则,双引号中的项目将被解释为对象名称

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

如果禁用了
,则可以使用它们来分隔字符串。否则,双引号中的项目将被解释为对象名称


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

正如Martin所说,您可以这样使用

SET QUOTED_IDENTIFIER OFF
BEGIN
DECLARE @SqlStmt AS VarChar(5000)
SET @SqlStmt = "ok"
PRINT @SqlStmt
END

就像马丁已经说过的,你可以用这个

SET QUOTED_IDENTIFIER OFF
BEGIN
DECLARE @SqlStmt AS VarChar(5000)
SET @SqlStmt = "ok"
PRINT @SqlStmt
END

成功了。谢谢我会接受你的答案,只要系统允许我(愚蠢的编辑,IMO)这样做。谢谢只要系统允许,我会尽快接受你的回答(愚蠢的编辑,IMO)