2012-06-28 11 views
7

私は現在、XMLという名前のXML型の列をdataという名前で、Storageというテーブルに格納しています。テーブル列からSQL Serverのビューに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、マネージャー、グランド)。

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

アイデア?前もって感謝します。

EDIT:以前

、私はこれは私が使用したコードになりますテーブルに細断した場合:

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:これは私が期待して出力されます。

Expected Output

+0

シュレッドに使用したコードを列に転記できますか、それをどのように変換しようとしていますか。 –

+1

上記の編集をご覧ください。 – themenace92

+0

あなたはどんな出力を期待していますか? – Kane

答えて

11

あなたが効果的に現在のデータセットにXMLのコレクションに参加できるよう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 APPLYOUTER APPLYを使用する必要があります。

+0

それは動作します!ありがとうございました:D – themenace92

+0

私の喜び!お力になれて、嬉しいです! –

+0

私は尋ねることができます、クロスとアウターの間にNULLが含まれるかどうかの違いはありますか? – themenace92

関連する問題