SP 执行时 SQL Server 2008 中的 QUOTED IDENTIFIER 错误
Posted
技术标签:
【中文标题】SP 执行时 SQL Server 2008 中的 QUOTED IDENTIFIER 错误【英文标题】:QUOTED IDENTIFIER error in SQL Server 2008 on SP execution 【发布时间】:2014-01-20 00:17:26 【问题描述】:执行存储过程时出现此错误:
插入失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。
创建过程时将QUOTED_IDENTIFIER
标志设置为ON
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'sp_procedure') AND TYPE IN (N'P', N'PC'))
BEGIN
DROP PROCEDURE [dbo].[sp_procedure]
END
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_procedure]
(
@param_1 XML
,@param_2 INT
)
AS
BEGIN
-- CODE
END
来自sys.sql_modules
的SELECT
语句显示uses_quoted_identifiers
以某种方式设置为0
。
我已经尝试执行以下代码。它在one batch
中运行。
SET QUOTED_IDENTIFIER ON;
EXEC sp_procedure @param_1 = N'<?xml version="1.0" encoding="utf-16"?>
xmlns:xsd="http://www.w3.org/2001/XMLSchema" />', @param_2= 51326
但这无济于事。
每个会话都是在 QUOTED_IDENTIFIER
设置为 1 的情况下创建的:
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
有什么想法吗?
UPD 原来,在运行这个特定的脚本之后,还运行了很多其他文件。其中一个刚刚重新创建了将 QUOTED_IDENTIFIER 设置为 OFF 的存储过程。
感谢您的帮助
【问题讨论】:
命令成功完成。 关于您的复制的一些事情是不正确的。它成功了。你能发布一个我可以在 tempdb 中运行的完整重现吗? 在这里也能成功运行。 希望这只是一个虚构的名称,但您应该避免在存储过程的名称中使用sp_
前缀。
@usr,我希望我能 不幸的是,代码与非常大的数据库紧密耦合。我知道这个简单的例子会成功。我宁愿需要一个提示,比如 SQL Server 属性(顺便说一下,QUOTED_IDENTIFIER 在那里设置为 ON),或者我错过了一些东西。 Profiler 显示没有关闭 QUOTED IDENTIFIER 的语句
【参考方案1】:
请确保表和视图定义也是使用带引号的标识符创建的。
【讨论】:
以上是关于SP 执行时 SQL Server 2008 中的 QUOTED IDENTIFIER 错误的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 R2执行存储过程sp_MailItemResultSets引起大量PREEMPTIVE_OS_WAITFORSINGLEOBJEC等待
sql server 2008,SP_OACreate手动执行成功,代理作业定时执行失败?
windows server 2008 R2 SP1 安装SQL Server 2008 R2时提示 "此操作系统不支持此版本的 SQL Server 版本"
sqlserver 2008 的跟踪器-sql server profiler,里面的内嵌视图exec sp_prepexec @p1 output