13

誰でもこれについての洞察を提供できますか?

XML データ型を使用してインポート プロセスを開発しました。import 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)

与える

Msg 1934, Level 16, State 1, Line 8 SELECT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or query notifications and/or xml data type methods.

This is documented in passing here

Executing XQuery and XML data modification statements requires that the connection option QUOTED_IDENTIFIER be ON.

I haven't seen a reason why this is a requirement for xQuery though.

于 2010-07-21T23:56:54.123 に答える