2017-08-04 12 views
1

から同じ子ノードを選択します。SPの小さなクエリ以下を経由してXMLデータを読み込む私は以下のように1つのXML文字列を持っているのOpenXML SQLストアド・プロシージャ

<XML> 
    <ProductDetail> 
     <Barcode>170604658</Barcode> 
     <PropertyDetail> 
      <PropertyKey>Size</PropertyKey> 
      <PropertyValue>XXL</PropertyValue> 
      <PropertyKey>ProdTaxType</PropertyKey> 
      <PropertyValue>5%</PropertyValue> 
     </PropertyDetail> 
    </ProductDetail> 
</XML> 

イム:

SELECT * 
    FROM OPENXML(@hDoc, 'XML/ProductDetail/PropertyDetail', 2) WITH 
    (
      PropertyKey VARCHAR(200) , 
      PropertyValue VARCHAR(200) 
    )XML 

しかし、上記FORイムは、以下のように1行のデータを取得:

PropertyKey PropertyValue 
    Size XXL 

しかし、定義されたXMLあたりのように私は以下のとおりデータを取得したい:

PropertyKey  PropertyValue 
Size    XXL 
ProdTaxType  5% 

私はxml文字列から1つのレコードしか取得していません。だから、上のSPで示唆してください。あなたのXMLが整形されていないので

+0

使用しているdbmsにタグを付けます。 (ほとんどの製品には独自のバージョンのストアドプロシージャがあります) – jarlh

+0

MS SQL SERVER ... –

+0

サンプルにEXEC sp_xml_preparedocument @idoc OUTPUT、@doc;をコールしていませんか? ' –

答えて

2

、それは次のようにする必要があります:あなたの例では

DECLARE @hdoc varchar(max) = '<XML> 
     <ProductDetail> 
     <Barcode>150604658</Barcode> 
     <PropertyDetail> 
        <PropertyKey>Size</PropertyKey> 
        <PropertyValue>XXL</PropertyValue> 
     </PropertyDetail> 
     <PropertyDetail> 
        <PropertyKey>ProdTaxType</PropertyKey> 
        <PropertyValue>5%</PropertyValue> 
     </PropertyDetail> 
    </ProductDetail> 
</XML>' 

PropertyDetailが重複する属性を持っています。

また、このように書き換えることができます

<PropertyDetail PropertyKey="Size" PropertyValue="XXL" 
       PropertyKey="ProdTaxType" PropertyValue="5%" /> 

が、意味はあなたが持っているXMLと同じです - and duplicate attributes are not allowed

DECLARE @hdoc varchar(max) = '<XML> 
     <ProductDetail Barcode="150604658"> 
     <PropertyDetail PropertyKey="Size" PropertyValue="XXL" /> 
     <PropertyDetail PropertyKey="ProdTaxType" PropertyValue="5%" /> 
    </ProductDetail> 
</XML>' 

今、あなたは書き込みは考えられないでしょう。

関連する問題