2011-09-21 56 views
1

我很惊讶地遇到一个使用双引号作为字符串分隔符的SQL 2008 T-SQL过程。例如:双引号可以用来分隔字符串吗?

DECLARE @SqlStmt AS VarChar(5000) 
SET @SqlStmt = "ok" 
PRINT @SqlStmt 

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

因为我想构建动态SQL,因此认为T-SQL像Javascript一样灵活,以便在要将两者混合在一个语句中的情况下作为分隔符使用时,我试图在其中一个存储过程中执行相同的操作。包括蜱。我很惊讶脚本不能编译,我得到了一个“INVALID COLUMN [X]”的错误,其中X是我引用的字符串的内容。所以,我把它分解为最简单的组件,直到我得到了上面看到的确切的SQL,它们编译,运行并打印出“OK”。

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

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

Msg 207, Level 16, State 1, Line 3 
Invalid column name 'ok'. 

说明更新:

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

感谢您的答案。

回答

6

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

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

+0

这样做。谢谢。系统允许我尽快接受你的答案(笨编辑,IMO) – ChadD

1

就像已经说过的马丁赛德,你可以这样使用。

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

thx为额外的信息/澄清 – ChadD

相关问题