2017-02-25 17 views
0

を使用して、データベーステーブル内のXMLフィールドを照会:私は親ノードとしてバスを持つVehicleHistoryBlobのXML内のすべてのエントリを見つけたSQLを記述する必要がは、私は次のような構造を持つテーブルの名前VehicleHistoryBlob持つSQL

VehicleHistoryBlobId int PRIMARY KEY 
VehicleHistoryBlob XML 

をし、子ノードとしての宛先(バスには多数の宛先があり、XMLの親ノードは常にバスではありません)。私は

DECLARE @tmpTable TABLE(theints INT) 
@tmpTable

XMLを通じて照会し、子ノードとして親ノードと宛先としてバスを持つすべてのエントリを見つけ、そして私のテンポラリ・テーブルにXMLに関連したVehicleHistoryBlobIdを渡す必要が

<Bus> 
... 
    <Destination> 
      <Name>The big building</Name> 
      <DestinationCode> A21301423 </DestinationCode> 
      <DestinationAddress> 440 Mountain View Parade </DestinationAddress> 
      <DestinationCountry> USA </DestinationCountry> 
    </Destination> 
</Bus>' 

私は.nodes関数を操作しようとしていますが、私はデータ型としてのXMLの経験が不足しているため正確な結果を得るのに苦労しています。

ありがとうございます!

答えて

2

XML列の特定の条件で行をフィルタリングするには、nodes()の代わりにexist()メソッドを使用できます。例えば、対応するXMLルート要素とDestination子要素としてBusを持って@temptableVehicleHistoryBlobIdに、次のクエリの挿入:

INSERT INTO @tmpTable 
SELECT v.VehicleHistoryBlobId 
FROM VehicleHistoryBlob v 
WHERE v.VehicleHistoryBlob.exist('/Bus/Destination') = 1 

sqlfiddle demo

+0

すごいです!ありがとう@ har07 – Mark

関連する問題