【发布时间】: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 - 但我不想这样做。这里有问题。我想知道这个问题是什么。
这里发生了什么?
【问题讨论】:
标签: sql-server stored-procedures sqlcmd quoted-identifier