nodes方法
nodes方法用于把一組由一個查詢返回的結(jié)點轉(zhuǎn)換成一個類似于結(jié)果集的表中的一組記錄行。該方法的語法如下:
nodes (XQuery) Table(Column)
這里,XQuery是選擇要暴露為一個結(jié)果集的結(jié)點的表達(dá)式。Table和Column用于指定結(jié)果集中的名字。注意,你僅可以操作一列并且它的自動類型為XML。例如,為了查詢并得到每一個投球手的信息,你可以編寫如下的代碼:
DECLARE @doc xml
SELECT @doc = '
<Team name="Braves">
<Players>
<Pitcher name="John Smoltz" role="Closer">
With team since 1989
</Pitcher>
</Players>
</Team>'
SELECT Team.player.query('.') as Pitcher
FROM @doc.nodes('/Team/Players/Pitcher')
Team(player)
這些在單個結(jié)果集中的結(jié)果包含相應(yīng)于每一個投球手的元素的行數(shù)據(jù):
Pitcher
--------------------------------------------
<Pitcher name="John Smoltz" role="Closer" />
<Pitcher name="Russ Ortiz" role="Starter" />
(2 row(s) affected)
注意,上面你使用了query方法把這些結(jié)點返回到結(jié)果中。其原因在于,一個nodes方法的結(jié)果可能僅能為XML方法(查詢,修改,刪除和更新)或IS NULL和IS NOT NULL語句所參考。
一般地,你可以使用nodes方法把XML分解為一組更為有用的結(jié)果。例如,你可以使用nodes方法得到運動員的結(jié)點,然后使用value方法檢索它們以便得到作為標(biāo)量數(shù)據(jù)的單個值:
SELECT Team.player.value(
'./@name', 'nvarchar(10)') as Name,
Team.player.value('./@role', 'nvarchar(10)') as
PlayerRole
FROM @doc.nodes('/Team/Players/Pitcher')
Team(player)
這會產(chǎn)生如下的結(jié)果:
Name PlayerRole
--------------- ---------------
John Smoltz Closer
Russ Ortiz Starter
(2 row(s) affected)
nodes方法用于把一組由一個查詢返回的結(jié)點轉(zhuǎn)換成一個類似于結(jié)果集的表中的一組記錄行。該方法的語法如下:
nodes (XQuery) Table(Column)
這里,XQuery是選擇要暴露為一個結(jié)果集的結(jié)點的表達(dá)式。Table和Column用于指定結(jié)果集中的名字。注意,你僅可以操作一列并且它的自動類型為XML。例如,為了查詢并得到每一個投球手的信息,你可以編寫如下的代碼:
DECLARE @doc xml
SELECT @doc = '
<Team name="Braves">
<Players>
<Pitcher name="John Smoltz" role="Closer">
With team since 1989
</Pitcher>
</Players>
</Team>'
SELECT Team.player.query('.') as Pitcher
FROM @doc.nodes('/Team/Players/Pitcher')
Team(player)
這些在單個結(jié)果集中的結(jié)果包含相應(yīng)于每一個投球手的元素的行數(shù)據(jù):
Pitcher
--------------------------------------------
<Pitcher name="John Smoltz" role="Closer" />
<Pitcher name="Russ Ortiz" role="Starter" />
(2 row(s) affected)
注意,上面你使用了query方法把這些結(jié)點返回到結(jié)果中。其原因在于,一個nodes方法的結(jié)果可能僅能為XML方法(查詢,修改,刪除和更新)或IS NULL和IS NOT NULL語句所參考。
一般地,你可以使用nodes方法把XML分解為一組更為有用的結(jié)果。例如,你可以使用nodes方法得到運動員的結(jié)點,然后使用value方法檢索它們以便得到作為標(biāo)量數(shù)據(jù)的單個值:
SELECT Team.player.value(
'./@name', 'nvarchar(10)') as Name,
Team.player.value('./@role', 'nvarchar(10)') as
PlayerRole
FROM @doc.nodes('/Team/Players/Pitcher')
Team(player)
這會產(chǎn)生如下的結(jié)果:
Name PlayerRole
--------------- ---------------
John Smoltz Closer
Russ Ortiz Starter
(2 row(s) affected)