2012-03-12 17 views
2

私は、下記のフォーマットを持つXML変数をした、と私はdinamically要素名とそのそれぞれのフィールド値を読み、いくつかのT-SQL構造にロードする必要があります:XML変数からデータを読み取る方法は?

declare @InputXml xml 
Set @InputXml = '<Root RootName="rooNameValueHere"> 
      <Element Name="elementName"> 
       <SubElement Field="subelementFielName"/> 
      </Element> 
      <Element Name="otherElementName"> 
       <SubElement Field="subelementFielName1"/> 
       <SubElement Field="subelementFielName2"/> 
       <SubElement Field="subelementFielName3"/> 
      </Element> 
     </Root>' 

ヒント: 1 - ルートにはN個の要素を含めることができます 2 - 各要素にはN個の要素を含めることができます 3 - すべての情報を取り出すことができるルーチンを作成する必要があります。また、要素名(ei:すべてのサブ要素を返します)。

select 
    t.c.value('@Field', 'nvarchar(10)') AS SomeAlias 
from 
    @InputXml.nodes('N/Root/Element[@Name = ''elementName'']//SubElement') t(c); 

解像度

このpostは私を助けて今、私はサブ要素が1人の要素名を与えられた取得するが、私はnull値を取得しています。このT-SQLを書いてきた

私の問題を解決する。誰にも感謝してくれました。

答えて

2

私は、クエリの最初から 'N' 文字を削除し、それが動作します:)

@InputXml.nodes('/Root/Element2[@Name = ''otherElementName'']//SubElement') t(c); 
+0

でも動作します適切な場所にあった、例えば'@ InputXml.nodes(N '/ Root/...') –

1

これを試してみてください:

select 
    t.c.value('@Field', 'nvarchar(100)') AS SomeAlias 
from 
    @InputXml.nodes(N'/Root/Element[@Name = "elementName"]/SubElement') t(c); 

結果:N場合

subelementFielName 
+1

真のUnicodeデータが今までに入っていたことを外部の可能性をカバーするために、要素名。 –

+0

@Aaronありがとう – G21

関連する問題