全局实施 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_IDENTIFIERSET 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的主要内容,如果未能解决你的问题,请参考以下文章

GitHub案例axios请求跨域问题——组件间的通信:全局事件总线的实施+工程化的显示

Exchange 2013 实施和管理-专题视频课程

Exchange 2013 实施和管理-专题视频课程

数据库应用系统功能设计与实施

SpringBoot:如何优雅地处理全局异常?

光能传递全局照明阴影的边缘抖动,不直