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

bal*_*hmi 39 sql-server-2005

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

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

SQL状态:42000本
机错误:1934

遗憾的是,此表没有索引视图,计算列或查询通知.这个存储过程在过去几天运行良好,并且从今天起一直在返回此错误.

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

注:如果我设置quoted_identifierON并重新运行CREATE PROCEDURE,这个问题将是固定的(现在).但我想先了解是什么引发了这个问题.

小智 51

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

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
Run Code Online (Sandbox Code Playgroud)

对于所有存储过程,编辑带有计算列的表.

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

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
GO

CREATE PROCEDURE dbo.proc_myproc
...
Run Code Online (Sandbox Code Playgroud)


ant*_*nta 7

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

sqlcmd -i myfile.sql

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

因此,解决方案实际上是像JimQUOTED_IDENTIFIER ON建议的那样将其添加到您的 sql 文件中,或者显式指定标志:-I

sqlcmd -i myfile.sql -I


Ram*_*Vel 5

我们不能通过将引用标识符设置为关闭来创建索引视图。我刚刚尝试过,如果 SQL 2005 关闭,它会立即引发错误:

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

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

我看过很多文章说它必须在创建视图索引之前打开。否则,在插入、更新表时会出现错误,但在这里我可以立即得到错误,因此 sql 引擎不允许根据此msdn 链接将其设置为关闭来在视图上创建索引。

前段时间我在堆栈中提出了类似的问题......

编辑

我关闭了全局查询执行(在编辑器中)ANSI 设置并在新编辑器中运行索引脚本,这一次它也抛出了同样的错误。所以很明显我们不能通过关闭quoted_identifier 来为视图创建索引。