UPDATE失败,因为以下SET选项具有不正确的设置:'QUOTED_IDENTIFIER'

时间:2009-08-07 10:12:17

标签: sql-server-2005

我遇到更新存储过程的问题。错误是:

  

UPDATE失败,因为以下SET选项的设置不正确:'QUOTED_IDENTIFIER'。验证SET选项是否正确,以便与计算列和/或查询通知和/或xml数据类型方法的索引视图和/或索引一起使用。

     

SQL状态:42000
  原生错误:1934年

不幸的是,此表有索引视图,计算列或查询通知。这个存储过程在过去几天运行正常,并且从今天起一直在返回此错误。

是否有任何建议有助于确定问题?

注意:如果我将quoted_identifier设置为ON并重新运行CREATE PROCEDURE,则问题将得到修复(暂时)。但我想先了解是什么引发了这个问题。

8 个答案:

答案 0 :(得分:46)

为了避免这个错误,我需要添加

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;

用于编辑具有计算列的表的所有存储过程。

您无需在proc中添加SET ,只需在创建过程中使用它,如下所示:

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
GO

CREATE PROCEDURE dbo.proc_myproc
...

答案 1 :(得分:3)

我们无法通过设置引用的标识符来创建索引视图。我刚刚尝试过,如果关闭它,SQL 2005就会立即抛出错误:

  

无法创建索引。对象'SmartListVW'是在关闭以下SET选项的情况下创建的:'QUOTED_IDENTIFIER'。

正如gbn所说,重建索引必须是关闭它的唯一方式。

我看过很多文章说在创建视图索引之前必须打开它。否则,在插入,更新表时会出现错误,但在这里我可以立即得到错误,因此sql引擎将不允许通过将其设置为off来创建视图索引,按照msdn link。 / p>

我前一段时间在in stack问了一个类似的问题......

编辑

我关闭了全局查询(在编辑器中)ANSI设置并在新编辑器中运行了索引脚本,这次它也抛出相同的错误。所以我们很清楚,我们无法通过关闭quoted_identifier来创建视图索引。

答案 2 :(得分:2)

一些想法:

索引重建了吗?如果使用DMO进行索引维护,则不会始终保留quoted_identifier。它是一个追踪的油漆,是一个特殊的问题是SQL Server 2000直到SP4左右。

但是,我也在前一段时间见过SQL Server 2005.

答案 3 :(得分:2)

我迟到了这个派对,但有这个错误,想分享它。

我们的问题是经常性但随机的,所以我们知道它不是一个错误创建的对象。

我们最终将其跟踪到Citrix场中其中一台服务器上的ODBC连接。在该服务器上,有问题的ODBC已关闭(未选中)QUOTED_IDENTIFIERS。在所有其他服务器上,它按预期进行了检查。我们打开了选项,问题立即得到解决。

答案 4 :(得分:1)

当我尝试使用 sqlcmd 通过命令行运行 sql 文件时出现此错误:

sqlcmd -i myfile.sql

默认情况下,使用此命令行工具时 QUOTED_IDENTIFIER 设置为 OFF,您将得到相同的错误(无论在 SSMS 中它可能设置为 ON 并且相同的脚本将通过)。

因此确实解决方案是将此 QUOTED_IDENTIFIER ON 添加到您的 sql 文件中,如建议的 Jim,或明确指定标志 -I

sqlcmd -i myfile.sql -I

答案 5 :(得分:0)

今天我在SSMS中运行存储过程时遇到此错误。断开与服务器的连接并重新连接新会话解决了我的问题。我以前运行的SP之前从未遇到过这个问题。

答案 6 :(得分:0)

在Job Scheduler SQL Server Agent中运行此查询时遇到相同的错误

UPDATE [Order]
SET OrderStatusID = 100
WHERE OrderStatusID = 200
AND OrderID IN (    
        [...]
)

我解决了从[中删除] [Order]个字符的问题:

UPDATE Order
SET OrderStatusID = 100
WHERE OrderStatusID = 200
AND OrderID IN (    
        [...]
)

没有更多错误

答案 7 :(得分:-1)

运行 SQL 代理作业时出现此错误,其中包含 3 个步骤 T-sql 脚本。

<块引用>

Msg 1934, Sev 16, State 1, Line 15 : UPDATE 失败,因为 以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。 验证 SET 选项是否适用于索引视图和/或 计算列和/或过滤索引和/或查询上的索引 通知和/或 XML 数据类型方法和/或空间索引 操作。 [SQLSTATE 42000]

我添加了

SET ANSI_NULLS, QUOTED_IDENTIFIER ON; 到代理作业的顶部并解决了问题。