SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'

Posted

技术标签:

【中文标题】SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:\'QUOTED_IDENTIFIER\'【英文标题】:SQL Server: INSERT/UPDATE/DELETE failed because the following SET options have incorrect settings: ‘QUOTED_IDENTIFIER’SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER' 【发布时间】:2014-05-20 20:38:01 【问题描述】:

我有一个相当尴尬的问题:

两周以来,每当我使用我的 SQL 脚本更新/创建存储过程后,当这些存储过程运行时,它们就会失败并出现上述错误。

处理此问题的其他帖子对我的情况没有帮助。

这里有一些参数,有助于排除不适用于我的情况的常见解决方案:

    我的存储过程脚本可以在我的笔记本电脑(SQL Server 2012、Windows Server 2008 R2)上完美运行。

    我的存储过程脚本在任何其他机器上正确创建存储过程(这是我们的构建机器,安装了 SQL Server 2012;我们的 TEST 服务器,安装了 SQL Server 2005,我们的 PROD 服务器,安装了 SQL Server 2005安装)。但是,存储过程不会在我以外的任何其他机器上运行。

    我正在我的机器上使用生产 SQL Server (SQL Server 2005) 的数据库备份(就像这里的任何其他机器一样)。

    即使是最基本的存储过程也会失败(例如DELETE myTable WHERE ID = @delID)。

    在我检查过的每个 SQL Server 安装中,引用标识符在服务器和数据库级别都设置为 OFF (!)。那么为什么我的存储过程突然需要将此选项设置为ON

    我正在使用SQLCMD 来运行我的脚本。这让我可以选择在USE 语句中动态设置服务器实例的数据库名称。

    我的脚本只包含USE 语句,并且紧跟在ALTER PROCEDURE 之后;或者IF EXISTS (...) DROP PROCEDURE ... GO; CREATE PROCEDURE ...

这一切都工作了好几年,但突然,从两周前开始,用我的脚本创建的存储过程突然失败了。

我知道我可以在我的脚本中手动将 QUOTED_IDENTIFIER 设置为 ON - 但我不想这样做。这里有问题。我想知道这个问题是什么。

这里发生了什么?

【问题讨论】:

【参考方案1】:

可能是您的存储过程现在正在对已添加索引的表执行某些操作吗?我遇到了同样的问题,这是由于计算列上的新索引造成的。

【讨论】:

我的客户不使用计算列。所以,恐怕我们的问题不是这样的。 好的。我唯一的其他建议是是否有带索引的视图。我有一种情况,我们有两个应用程序在同一个数据库上运行。一个可以处理视图和/或计算列上的索引,而另一个(显然使用 Quoted Identifier = off)则不能。【参考方案2】:

SQLCMD 默认将 QUOTED_IDENTIFIER 选项设置为 OFF。您可以使用 -I 选项更改它。

【讨论】:

是的,但这不是我正在寻找的解决方案。它应该可以在不添加 -I 选项的情况下完美运行。这工作了多年。但突然之间,它没有。我想知道这种行为的原因,我不只是想规避它。 抱歉,我不能说两周前你的机器突然发生了什么变化。我给了你最好的解释,任何人都可以在没有完全访问你的机器的情况下。 感谢 Dean 提供的帮助。当然,我明白。但我认为必须有一些可用的 SS 跟踪工具,使我能够追踪这种行为的原因。该错误没有给出导致它发生的原因。我想调查一下将 SS 恢复到其原始运行状态的原因。

以上是关于SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中insert/update的高性能写法

SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'

SQL Server 中的表统计信息会影响 INSERT、UPDATE 性能吗?

SQL Server Profiler 2008 怎么追踪特定种类语句如 insert,update,delete,能指定某个数据追踪吗

使用 SQL Server 中的函数插入/更新/删除

数据更新视图的创建与改动