0
CREATE TABLE SportsEvent
(ID INT, Name NVARCHAR(20), Results XML);
GO
DECLARE @Results XML=
'<Athletics>
<Event ID="001" Name="100m">
<Gold>John Doe</Gold>
<Silver>Harry Smith</Silver>
<Bronze>Kenneth Brown</Bronze>
</Event>
<Event ID="002" Name="High Jump">
<Gold>Sarah Jones</Gold>
<Silver>Janice Johnson</Silver>
<Bronze>Alicia Armstrong</Bronze>
</Event>
</Athletics>'
INSERT INTO SportsEvent
VALUES(1, 'AthleticsDay', @Results);
SELECT * FROM SportsEvent;
如果我想拔出基於事件ID的元素,沒有任何問題:如何使用XQUERY從XML中獲取屬性的值?
SELECT Results.query('(/Athletics/Event[@ID="001"]/Gold)')
FROM SportsEvent
WHERE ID = 1
我可以做同樣的相對引用:
SELECT Results.query('(Athletics/Event)[1]')
FROM SportsEvent
WHERE ID = 1
但如果我想要拉事件名稱基於相對還是絕對?:
SELECT Results.query('(Athletics/Event[@Name])[@ID="001"]')
FROM SportsEvent
WHERE ID = 1
SELECT Results.query('(Athletics/Event[@Name])[1]')
FROM SportsEvent
WHERE ID = 1
... bo th帶回該事件的所有數據。
我嘗試使用值的方法:
SELECT Results.value('(/Athletics/Event/@Name)[1]','VARCHAR(20)')
FROM SportsEvent
WHERE ID = 1
...但這隻適用於相對引用即在這種情況下,第一組中的XML結果。
如果我想指定事件ID並只返回事件名稱(作爲XML片段或數據/值),該怎麼辦?