2010-07-21 108 views
11

任何人都可以提供这方面的见解吗?SQL Server XML数据类型和QUOTED_IDENTIFIER

我开发了一个使用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查询路径元素( '/记录/记录')做。

感谢您提供的任何见解。

回答

16

一个非常简单的测试案例

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的要求,但是。

+0

非常感谢,马丁。 Msg 1934正是我在我的场景中得到的信息。我将回顾文档。知道这确实是预期的行为是令人欣慰的。再次感谢。 – 2010-07-22 12:50:48