全局实施 QUOTED_IDENTIFIER
Posted
技术标签:
【中文标题】全局实施 QUOTED_IDENTIFIER【英文标题】:Implementing QUOTED_IDENTIFIER globally 【发布时间】: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 脚本来做同样的事情。发表您的上述评论作为答案,我将其标记并关闭此问题。
【参考方案1】:
如果您仍在寻找它,还有另一种方法,诚然,它不是最自我记录的方法。
EXEC sys.sp_configure N'user options', N'256'
GO
RECONFIGURE WITH OVERRIDE
GO
如果您右键单击数据库,转到属性、连接,然后从列表中选择带引号的标识符,这就是 SSMS 所做的。它使 sql server 为所有传入的连接设置带引号的标识符选项。
【讨论】:
以上是关于全局实施 QUOTED_IDENTIFIER的主要内容,如果未能解决你的问题,请参考以下文章