1

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

两周以来,每当我使用我的 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 ...

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

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

这里发生了什么事?

4

2 回答 2

6

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

于 2014-04-08T09:05:29.443 回答
0

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

于 2014-10-12T21:54:49.447 回答