4

我已经在SqlDependency的帮助下实现了一种机制,它可以提醒我特定数据库表中的任何更改。

但这打破了我现有的功能,我正在更新我已经实现 SqlDependency 的数据库表。

我收到以下错误:

UPDATE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。

这类似于“ sqldependency-causes-error-in-other-application ”。

我发现对表执行更新的 proc 是在 QUOTED_IDENTIFIER 设置为 OFF 的情况下创建的,这就是问题的确切原因。

如果我用“ SET QUOTED_IDENTIFIER ON ”更改过程,一切都会完美。但这不是一个可行的解决方案,因为我必须搜索所有 proc 并需要更改它们。

我想知道的是,每次在从应用程序代码执行我的 proc 之前,有一种通用的方法可以调用“SET QUOTED_IDENTIFIER ON”。

我的应用程序是一个 ASP.Net 4 Web 应用程序,我使用 Microsoft Enterprise Library 5.0 来执行数据库操作。我在其中使用以下组件:Microsoft.Practices.EnterpriseLibrary.Data.Database

也欢迎 SqlDependency 的任何替代解决方案。

[已编辑] SQL Server 2008 中是否有任何直接方法可以直接将 QUOTED_IDENTIFIER 设置为 true 而无需更改 proc。我在想的是编写一个脚本,将 QUOTED_IDENTIFIER 设置为依赖于该表的所有对象(使用 sp_depends)。

4

1 回答 1

1

如果您仍在寻找它,还有另一种方法,诚然,它不是最自我记录的方法。

EXEC sys.sp_configure N'user options', N'256'
GO
RECONFIGURE WITH OVERRIDE
GO

如果您右键单击数据库,转到属性、连接,然后从列表中选择带引号的标识符,这就是 SSMS 所做的。它使 sql server 为所有传入连接设置带引号的标识符选项。

于 2013-10-23T02:08:48.070 回答