我正在解决这个小谜题,并认为你可以帮助我。
所以我在SQL Server的XML Field中有这种结构吗?
<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 :(得分:0)
你应该可以这样做:
SELECT
issneg = XC.value('(issneg)[1]', 'varchar(25)')
FROM
dbo.YourTableName
CROSS APPLY
YourXmlColumnName.nodes('/negocio/financeironegocio/cliente') AS XT(XC)
基本上,这将获取与该XPath表达式匹配的XML元素(该结构中的所有<cliente>
个节点)并在内存中创建一个名为XT
的伪表,其中包含一列{{1} } XC
类型。您现在可以查询该伪表/列以获取单个位。这将创建一个表,其行数与XML结构中的XML
元素一样多。