2010-07-21 105 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