今天遇到的隨堂測驗,考題如下:
SQL Server有一資料表,其中Records欄為XML型別,其中包含多筆記錄,目標要將記錄展開成多筆查詢結果:
.xmljoin-tab td { padding: 3px; }001 | Jeffrey | 2014-01-01 | 9999 |
001 | Jeffrey | 2014-04-01 | 32767 |
002 | Darkthread | 2014-06-10 | 65535 |
要實現以上需求,關鍵在於兩項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查詢就完成囉~