我有两个xml版本,重命名为" Serie"和"系列" 有没有办法只有一个查询?
SELECT Top 10 folioF,
XMLCFDI.value('(./*:Comprobante/@Serie)[1]','varchar(25)') AS serie
FROM [Comprobantes].[dbo].[CFDI]
SELECT Top 10 folioF,
XMLCFDI.value('(./*:Comprobante/@serie)[1]','varchar(25)') AS serie
FROM [Comprobantes].[dbo].[CFDI]
答案 0 :(得分:0)
使用属性列表.nodes()
调用检查这些方法:
DECLARE @xml XML=
N'<root>
<test serie="lower"/>
<test Serie="camel"/>
<test SERIE="upper"/>
<test Other="Other"/>
</root>';
SELECT attr.value('.','nvarchar(max)') AS attrVal
,attr.value('local-name(.)','nvarchar(max)') AS attrName
FROM @xml.nodes('/root/test') AS A(tst)
CROSS APPLY tst.nodes('@*') AS B(attr)
或者,您可以使用谓词限制结果(更改最后一行):
CROSS APPLY tst.nodes('@*[lower-case(local-name())="serie"]') AS B(attr)
另一种方法
SELECT tst.value('(./@*[lower-case(local-name())="serie"])[1]','nvarchar(max)')
FROM @xml.nodes('/root/test') AS A(tst)