2015-02-23 75 views
0

我有這個小小的拼圖想出來,並認爲你可以幫助我。如何使用XQuery從SQL Server中檢索XML節點?

因此,我在SQL Server的XML字段中有這種結構?

<negocio> 
    <qualificado>N</qualificado> 
    <local>BOVESPA</local> 
    <natureza>V</natureza> 
    <mercado>VIS</mercado> 
    <prazo /> 
    <isin>BRPETRACNPR6</isin> 
    <especificacao>PETROBRAS PN</especificacao> 
    <observacao>D</observacao> 
    <quantidade>500</quantidade> 
    <precoajuste>20,91</precoajuste> 
    <volume>10455</volume> 
    <financeironegocio liquidoneg="10398,51"> 
    <cblc> 
     <valoropera>10455</valoropera> 
     <taxaliquidacaoneg>-2,09</taxaliquidacaoneg> 
     <taxaregistroneg>0</taxaregistroneg> 
    </cblc> 
    <bolsa> 
     <taxaprazoneg>0</taxaprazoneg> 
     <taxaananeg>0</taxaananeg> 
     <emolumentoneg>-0,52</emolumentoneg> 
    </bolsa> 
    <corretora> 
     <corretagemneg>-52,63</corretagemneg> 
     <intermediacaoneg>-1,82</intermediacaoneg> 
    </corretora> 
    <cliente> 
     <issneg>2,63</issneg> 
     <irrfoperacoesneg>0</irrfoperacoesneg> 
     <irrfdtneg>1,25</irrfdtneg> 
     <outrasdespesasneg>0</outrasdespesasneg> 
    </cliente> 
    </financeironegocio> 
</negocio> 
<negocio> 

該結構重複了很多次,我需要從它們中的每一箇中獲取信息。我知道使用像下面那樣的.value查詢可以使我在整個XML中獲得第一個命中。

select texto.value('(identificador/evento/negocio/financeironegocio/cliente/issneg)[5]','varchar(100)') from #tempxml 

我的問題在於:我如何獲得其他人?如果我使用[2],[3]我可以得到它們,但是我不知道每個文件中有多少節點,我需要將它們全部取出。

有什麼建議嗎?

感謝

回答

0

你應該能夠做的是這樣的:

SELECT 
    issneg = XC.value('(issneg)[1]', 'varchar(25)') 
FROM 
    dbo.YourTableName 
CROSS APPLY 
    YourXmlColumnName.nodes('/negocio/financeironegocio/cliente') AS XT(XC) 

基本上,這需要相匹配的XPath表達式(在該結構中的所有<cliente>節點)和創建的XML元素存儲器中的僞表,稱爲XT,具有XML類型的單列XC。您現在可以查詢該僞表/列以獲取單個零碎。這將創建一個具有與XML結構中的<cliente>元素一樣多的行的表。

相關問題