今天遇到的隨堂測驗,考題如下:

SQL Server有一資料表,其中Records欄為XML型別,其中包含多筆記錄,目標要將記錄展開成多筆查詢結果:

001Jeffrey2014-01-019999
001Jeffrey2014-04-0132767
002Darkthread2014-06-1065535

要實現以上需求,關鍵在於兩項SQL功能:

  • SQL XML nodes()
    將XML型別轉成關聯式資料
  • CROSS APPLY
    以結果列的特定欄位當成參數傳給函式得到資料表後與原結果列進行JOIN

二者結合成以下語法

SELECT 
    A.PlayerId, A.PlayerName,
    T.C.value('@Date', 'VARCHAR(10)') RecDate,
    T.C.value('.', 'INT') Score
FROM XMLJOIN A
CROSS APPLY A.Records.nodes('//Rec') T(C)

資料表與XML節點的JOIN查詢就完成囉~


Comments

Be the first to post a comment

Post a comment