SELECT 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'

use*_*767 4 sql-server-2008

这个说法有什么问题?为什么它会给出以下错误消息

错误信息:

SELECT 失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。验证 SET 选项是否正确用于计算列上的索引视图和/或索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。

陈述

  SELECT  ISNULL(STUFF((SELECT ', ' + u.TITLE + ' ' + u.FirstNAME  + ' ' + LastNAME   [text()]
                                         FROM table1 c 
                                         INNER JOIN table2 u ON c.user = u.user
                                         AND c.Task = @task 
                                         AND c.Type = 'Assign'
                                         FOR XML PATH(''), TYPE)
                                        .value('.','NVARCHAR(MAX)'),1,2,' ')
                                 ,'') UNAMESLIST
Run Code Online (Sandbox Code Playgroud)

Sco*_*red 7

SET QUOTED_IDENTIFIER (Transact-SQL) 中所述

调用 XML 数据类型方法时,SET QUOTED_IDENTIFIER 必须为 ON。

一个简单的测试

set quoted_identifier off


DECLARE @xmlRecords XML
SET     @xmlRecords = '<records><record orderId="1" refCode="1234"></record></records>'


SELECT  records.record.value('(@orderId)[1]', 'INT') AS orderId
FROM    @xmlRecords.nodes('/records/record') records(record)
Run Code Online (Sandbox Code Playgroud)

消息 1934,级别 16,状态 1,第 8 行 SELECT 失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。验证 SET 选项是否正确用于计算列上的索引视图和/或索引和/或查询通知和/或 xml 数据类型方法。

您正在使用 FOR XML PATH

SET QUOTED_IDENTIFIER off

DECLARE @T TABLE (id VARCHAR(5),col1 XML)

INSERT INTO @t (id,col1) VALUES ('1','<node1>one</node1>')

SELECT ISNULL(STUFF((
                SELECT ', ' + id
                FROM @t
                FOR XML PATH('')
                    ,TYPE
                ).value('.', 'NVARCHAR(MAX)'), 1, 2, ' '), '') UNAMESLIST
Run Code Online (Sandbox Code Playgroud)

消息 1934,级别 16,状态 1,第 8 行 SELECT 失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。验证 SET 选项是否正确用于计算列上的索引视图和/或索引和/或查询通知和/或 xml 数据类型方法。