【发布时间】:2013-01-26 05:32:49
【问题描述】:
我已经在 SqlDependency 的帮助下实现了一种机制,它可以提醒我特定数据库表中的任何更改。
但这破坏了我现有的功能,我正在更新我已经实现 SqlDependency 的数据库表。
我收到以下错误:
更新失败,因为以下 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)。
【问题讨论】:
-
"每次从应用程序代码执行我的 proc 之前调用
SET QUOTED_IDENTIFIER ON。" - 这不是你想要的。您已正确确定需要更改存储过程:“创建存储过程时,将捕获SET QUOTED_IDENTIFIER和SET ANSI_NULLS设置并将其用于该存储过程的后续调用 -
这是一个similar question,来自某个想要更改其所有过程的
ANSI_NULLS的人(通过搜索“更改存储过程quoted_identifier 设置”找到) -
谢谢达米安。我现在创建了一个 SQL 脚本来做同样的事情。发表您的上述评论作为答案,我将其标记并关闭此问题。
标签: sql-server-2008 enterprise-library sqldependency quoted-identifier