我正在尝试从Microsoft SQL Server中的XML文件检索属性。我的查询适用于获取元素,但不适用于属性。
这是XML的一部分:
<DN_CHARGE_LINES>
<DN_CHARGE_LINE LINE_ID="201903297661150">
<CHARGE_NAME>HANDLING CHARGE</CHARGE_NAME>
<CURRENCY_CODE>USD</CURRENCY_CODE>
<RATE>75</RATE>
<QTY>1</QTY>
<LINE_AMOUNT>75</LINE_AMOUNT>
<JOB_ID>201903137354913</JOB_ID>
</DN_CHARGE_LINE>
</DN_CHARGE_LINES>
这是我当前正在使用的代码:
INSERT INTO WWL_DNHead (DN_ID, TO_PARTY_NAME, TO_PARTY_ADDRESS)
SELECT
MY_XML.DN_HEAD.query('@DN_ID').value('.', 'VARCHAR(25)'),
MY_XML.DN_HEAD.query('TO_PARTY_NAME').value('.', 'VARCHAR(25)'),
MY_XML.DN_HEAD.query('TO_PARTY_ADDRESS').value('.', 'VARCHAR(25)')
FROM (SELECT CAST(MY_XML AS xml)
FROM OPENROWSET(BULK '\\shareapp\c$\temp\XML_4\DN_DN1903297826.xml', SINGLE_BLOB) AS T(MY_XML)) AS T(MY_XML)
CROSS APPLY MY_XML.nodes('WWLDCEDI/DN_HEAD') AS MY_XML (DN_HEAD)
SELECT * FROM WWL_DNHead
我想检索LINE_ID
并将其显示在SQL表中,除了CHARGE_NAME
,CURRENCY_CODE
以及该节点中的所有其他元素(我可以提取该元素)现在)。
答案 0 :(得分:0)
您可以使用values[0]
将XML拆分为元素值,然后使用nodes
提取所需的值:
value
结果:
如果您有更多declare @table table (MY_XML xml)
insert into @table select
'<DN_CHARGE_LINES>
<DN_CHARGE_LINE LINE_ID="201903297661150">
<CHARGE_NAME>HANDLING CHARGE</CHARGE_NAME>
<CURRENCY_CODE>USD</CURRENCY_CODE>
<RATE>75</RATE>
<QTY>1</QTY>
<LINE_AMOUNT>75</LINE_AMOUNT>
<JOB_ID>201903137354913</JOB_ID>
</DN_CHARGE_LINE>
</DN_CHARGE_LINES>'
select
cn.s.value('@LINE_ID' , 'nvarchar(max)') AS LINE_ID
,cn.s.value('CHARGE_NAME[1]' , 'nvarchar(max)') AS CHARGE_NAME
,cn.s.value('CURRENCY_CODE[1]', 'nvarchar(max)') AS CURRENCY_CODE
,cn.s.value('RATE[1]' , 'nvarchar(max)') AS RATE
,cn.s.value('QTY[1]' , 'nvarchar(max)') AS QTY
,cn.s.value('JOB_ID[1]' , 'nvarchar(max)') AS JOB_ID
from @table
CROSS APPLY MY_XML.nodes('//DN_CHARGE_LINE') cn(s)
个元素:
<DN_CHARGE_LINE>
这是结果: