这个说法有什么问题?为什么它会给出以下错误消息
错误信息:
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)
如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 数据类型方法。