我遇到了更新存储过程的问题.错误是:
UPDATE失败,因为以下SET选项具有不正确的设置:'QUOTED_IDENTIFIER'.验证SET选项是否正确,以便与计算列和/或查询通知和/或xml数据类型方法的索引视图和/或索引一起使用.
SQL状态:42000本
机错误:1934
遗憾的是,此表没有索引视图,计算列或查询通知.这个存储过程在过去几天运行良好,并且从今天起一直在返回此错误.
是否有任何建议有助于确定问题?
注:如果我设置quoted_identifier到ON并重新运行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)
我们不能通过将引用标识符设置为关闭来创建索引视图。我刚刚尝试过,如果 SQL 2005 关闭,它会立即引发错误:
无法创建索引。对象“SmartListVW”是在关闭以下 SET 选项的情况下创建的:“QUOTED_IDENTIFIER”。
正如 gbn 所说,重建索引必须是它被关闭的唯一其他方式。
我看过很多文章说它必须在创建视图索引之前打开。否则,在插入、更新表时会出现错误,但在这里我可以立即得到错误,因此 sql 引擎不允许根据此msdn 链接将其设置为关闭来在视图上创建索引。
前段时间我在堆栈中提出了类似的问题......
编辑
我关闭了全局查询执行(在编辑器中)ANSI 设置并在新编辑器中运行索引脚本,这一次它也抛出了同样的错误。所以很明显我们不能通过关闭quoted_identifier 来为视图创建索引。