8

私は現在、XMLをStorageというテーブルのdataというXMLタイプの列に格納するこのコードを持っています。

    CREATE TABLE Storage
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    data XML NOT NULL
)

GO

INSERT INTO Storage(data) 
VALUES('<footballteams>   
    <team manager="Benitez">     
        <name>Liverpool</name>     
        <ground>Anfield</ground>   
    </team>   
    <team manager="Mourinho">     
        <name>Chelsea</name>     
        <ground>Stamford Bridge</ground>   
    </team>   
    <team manager="Wenger">     
         <name>Arsenal</name>     
         <ground>Highbury</ground>   
    </team> 
</footballteams>'); 

データを細断処理してFootballView(TeamName、Manager、Ground)の形式で表示するFootballViewというビューを作成したいと思います。

以前、.nodes()メソッドを使用して完全なドキュメントをテーブル列に細断処理しましたが、ビューを作成するときはより難しいようです(ビューを使用する理由があります)。問題は、以前はxml ='xmlcontent'としてDECLAREされた変数@inputで.nodesを呼び出したばかりですが、ビューではこれを実行できず、Storageテーブル列に含まれるXMLを解析したいということです。

何か案は?前もって感謝します。

編集:

以前は、テーブルに細断処理した場合、これは私が使用するコードになります。

SELECT     
        TeamName = Foot.value('(name)[1]', 'varchar(100)'),     
        Manager = Foot.value('(@manager)', 'varchar(100)'),     
        Ground = Foot.value('(ground)[1]', 'varchar(100)')   
FROM     
        @input.nodes('/footballteams/team') AS Tbl(Foot)

EDIT2:これは私が期待する出力です。

期待される出力

4

1 に答える 1

11

あなたが使用する必要がありますCROSS APPLY

SELECT     
        TeamName = Foot.value('(name)[1]', 'varchar(100)'),     
        Manager = Foot.value('(@manager)', 'varchar(100)'),     
        Ground = Foot.value('(ground)[1]', 'varchar(100)')   
FROM    
    Storage S 
        CROSS APPLY data.nodes('/footballteams/team') AS Tbl(Foot)

CROSS APPLYまたOUTER APPLY、現在のデータセット内のXMLのコレクションに効果的に参加できるようにします。

于 2012-06-28T13:39:16.190 に答える