SQLServer2005的XML數(shù)據(jù)類型之基礎(chǔ)篇[4]

字號:

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)