2012-03-12 122 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:for a given element,返回它的所有子元素)。

現在,我已經寫了這個T-SQL來獲得subElements屬性給出一個元素的名字,但我得到一個空值:

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

分辨率

post幫助我清除我的問題。感謝所有迴應的人。

回答

2

我從查詢開始去除 'N' char和工程:)

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

也會如果N功是在正確的位置,例如'@ InputXml.nodes(N'/ Root/...' – 2012-03-12 22:35:51

1

試試這個:

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

結果:

subelementFielName 
+1

我認爲N應該仍然處於開始階段(恰好在正確的位置),以涵蓋真正的Unicode數據所包含的外部機會,元素名稱。 – 2012-03-12 22:36:40

+0

謝謝@Aaron – G21 2012-03-13 15:23:19