SP执行时SQL Server 2008中的QUOTED IDENTIFIER错误

时间:2014-01-02 14:10:46

标签: sql-server sql-server-2008 quoted-identifier

执行存储过程时出现此错误:

  

INSERT失败,因为以下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
来自SELECT

sys.sql_modules声明显示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。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

快乐确保表和视图定义也是使用带引号的标识符创建的。