【发布时间】:2022-01-23 02:12:00
【问题描述】:
我在存储过程中使用FOR XML PATH,因此我需要将QUOTED_IDENTIFIER 设置为ON。我把它作为我的存储过程的第一条语句。
SET QUOTED_IDENTIFIER ON;
除了我第一次恢复我的数据库之外,这一直工作正常。
刚恢复数据库后,我检查了sp_helptext <SPName>,存储过程似乎没问题。
但是,当我从对象资源管理器中浏览我的存储过程并单击“修改”时,它会显示:
当我尝试使用 EXEC <SP_Name> 执行存储过程时,它会引发错误
SELECT 失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。
有人可以指导我为什么 SQL Server 自己添加SET QUOTED_IDENTIFIER OFF 吗?如何摆脱它?或者我们如何从存储过程中覆盖它?
如果我从顶部删除SET QUOTED_IDENTIFIER OFF,重新执行/运行它就会正常工作。
我的问题是 - 我们有自动化流程,在每次构建时都会运行迁移/创建数据库,所以我不能一直手动删除它。 我也不能在数据库级别设置它。
我检查了数据库设置并将其设置为false,但这应该没有什么区别吧?因为我在我的存储过程中专门设置了它。
提前谢谢你。
【问题讨论】:
-
停止你正在做的事情。召集整个团队并讨论此设置、其工作原理(阅读文档)、为什么默认设置为关闭以及谁更改了此设置(以及原因)。
-
您不应将此设置为您的过程文本的一部分,此设置是您创建的每个对象的元数据的一部分,并且取决于对象创建时的连接设置创建的。它应该是 ON - 没有理由在最新版本的 SQL Server 中将其设置为关闭,这样做可能会对某些需要它的功能产生不利影响,正如您从错误文本中看到的那样。
标签: sql-server quoted-identifier