13

任何人都可以提供对此的见解吗?

我开发了一个使用 XML 数据类型的导入过程。通过导入 sProc 将数据插入到表中后,我运行另一个过程以使用导入的表更新另一个表。

如果使用 SET QUOTED_IDENTIFIER OFF 创建更新过程,则会引发异常。我想了解为什么会这样。

这是代码:

DECLARE @xmlRecords XML
SET     @xmlRecords = (SELECT importedXML FROM importTable WHERE importId = @lastImportId)

UPDATE  o
SET     o.ReferralCode = import.refCode
FROM    (
            SELECT  records.record.value('(@orderId)[1]', 'INT') AS orderId, 
                    records.record.value('(@refCode)[1]', 'VARCHAR(15)') AS refCode
            FROM    @xmlRecords.nodes('/records/record') records(record)
            ) import 
            INNER JOIN tblOrder o ON import.OrderId = o.orderId

我假设它与引用的数据类型('VARCHAR(15)')或 xml 查询路径元素('/records/record')有关。

感谢您提供的任何见解。

4

1 回答 1

18

一个非常简单的测试用例

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)

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

这是通过here记录的

执行 XQuery 和 XML 数据修改语句要求连接选项 QUOTED_IDENTIFIER 为 ON。

我还没有看到为什么这是 xQuery 的要求的原因。

于 2010-07-21T23:56:54.123 回答