SQL Server - 使用Quoted_identifier ON和OFF以及Getdate()

时间:2011-05-05 18:47:57

标签: sql-server sql-server-2005 sql-server-2008

我的脚本 SQL 有问题,请帮助我。

例如:

我有一个插入声明:

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE());

执行此插入时,返回以下消息:

  

“Ms 1934,Level 16,State 1,Server   HENRIQUE-PC,第5行INSERT失败   因为以下SET选项有   设置不正确:'QUOTED   _IDENTIFIER'即可。验证SET选项是否正确使用   索引视图和/或索引   计算列和/或过滤   索引和/或查询通知   和/或XML数据类型方法和/或   空间索引操作。“。

现在,当我使用SET QUOTED_IDENTIFIER ON时,我的插入执行成功。

例如:

SET QUOTED_IDENTIFIER OFF
GO

INSERT INTO CUSTOMER (Code, Date) VALUES (1, GETDATE());

SET QUOTED_IDENTIFIER ON
GO
  

(1行受影响)

GETDATE()QUOTED IDENTIFIER之间的关系是什么?

为什么我需要在这种情况下使用 QUOTED IDENTIFIER

我相信这是因为getdate。为什么呢?

感谢。

Henrique Melicio

1 个答案:

答案 0 :(得分:3)

Henrique的,

您收到该错误的原因与GETDATE()无关,它与您在CUSTOMER表中的列上的索引有关。 SQL Server 2008的SET Statements (Transact-SQL)文档中的这一位更详细地解释了这个问题:

  

创建和操作时   计算列或索引的索引   视图,SET选项ARITHABORT,   CONCAT_NULL_YIELDS_NULL,   QUOTED_IDENTIFIER,ANSI_NULLS,   ANSI_PADDING和ANSI_WARNINGS必须   设置为ON。选项   NUMERIC_ROUNDABORT必须设置为OFF。

     

如果未设置其中任何一个选项   到所需的值,INSERT,   更新,删除,DBCC CHECKDB和DBCC   对索引视图或。的CHECKTABLE操作   计算索引的表   列将失败。 SQL Server会   引发列出所有选项的错误   设置不正确。另外,SQL   服务器将处理SELECT语句   在这些表或索引视图上,如果   计算列或上的索引   这些观点不存在。