2011-12-02 5 views
0

私は短い2レコードのXMLテキストを持っていますが、.valueを実行すると最初のレコードしか取得できません。どのように値のテーブルリストを取得するのですか?TSQLのxml.valueは1レコードしか返しません

declare @x as xml 

set @x = '<?xml version="1.0" encoding="UTF-8"?> 
      <vehicle> 
       <vehicleid>54142</vehicleid> 
       <networkid>21301</networkid> 
       <description>Demo #54143</description> 
      </vehicle> 
      <vehicle> 
       <vehicleid>54143</vehicleid> 
       <networkid>213101</networkid> 
       <description>Demo #54143</description> 
      </vehicle> ' 

SELECT @x.query('/*') 

SELECT @x.value('(/vehicle/vehicleid/text())[1]', 'varchar(50)') as vehicleid, 
    @x.value('(/vehicle/description/text())[1]', 'varchar(50)') as description 

go 

結果:

<vehicle><vehicleid>54142</vehicleid><networkid>21301</networkid><description>Demo #54143</description></vehicle> (WRAP to next line) 
<vehicle><vehicleid>54143</vehicleid><networkid>213101</networkid><description>Demo #54143</description></vehicle> 

(1 row(s) affected) 

vehicleid           description 
54142            Demo #54143 

(1 row(s) affected) 
+0

([SQL Server内の値()を使用してXML列から取得複数のレコード]の可能重複http://stackoverflow.com/questions/1393250/getting-multiple-records-from -xml-column-value-in-sql-server) – mellamokb

答えて

1

(詳細についてはthis questionを参照)、これを試してみてください:

SELECT T.C.value('(vehicleid/text())[1]', 'varchar(50)') as vehicleid, 
    T.C.value('(description/text())[1]', 'varchar(50)') as description 
from @x.nodes('//vehicle') as T(C) 

@x.valueは、単一の値を返しますので、あなたはにノードのコレクションから照会する必要があります複数の結果を得る。

0

用途:

SELECT t.c.value('(vehicleid)[1]', 'varchar(50)') [vehicleid] 
    , t.c.value('(description)[1]', 'varchar(50)') [description] 
FROM @x.nodes('//vehicle') t(c) 
関連する問題