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

时间:2014-04-08 08:54:16

标签: sql-server stored-procedures sqlcmd quoted-identifier

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

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

处理此问题的其他帖子在我的案例中没有帮助。

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

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

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

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

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

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

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

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

  8. 这一切现在已经存在多年了,但突然间,自两周前以来,使用我的脚本创建的存储过程突然失败。

    我知道我可以在脚本中手动设置QUOTED_IDENTIFIERON - 但我不想这样做。这里有点不对劲。我想知道那个问题是什么。

    这里发生了什么?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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