【问题标题】:SQL Server - Using Quoted Identifier ON and OFF and Getdate()SQL Server - 使用带引号的标识符 ON 和 OFF 以及 Getdate()
【发布时间】:2011-05-05 18:47:56
【问题描述】:

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

例如:

我有一个插入语句:

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

当我执行这个插入时,返回以下消息:

“消息 1934,级别 16,状态 1,服务器 HENRIQUE-PC,第 5 行插入失败 因为以下 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。为什么?

谢谢。

恩里克·梅利西奥

【问题讨论】:

  • “客户”是表还是视图?

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


【解决方案1】:

恩里克,

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

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

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

【讨论】:

  • 感谢 AJ01,我的脚本现在可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 2014-05-05
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
相关资源
最近更新 更多