【发布时间】:2019-05-02 13:20:13
【问题描述】:
我正在尝试从 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
除了CHARGE_NAME、CURRENCY_CODE 和该节点中的所有其他元素(我现在能够获取)之外,我还想检索 LINE_ID 并将其显示在 SQL 表中。
【问题讨论】:
-
您发布的 xml 与查询不匹配(您使用不同的名称)。
-
问题不清楚,但根据我的理解。你在寻找类似
MY_XML.DN_HEAD.value('(./*/@LINE_ID)[1]','varchar(40)') -
LINE_ID 和 DN_ID 是同一种属性,我已经尝试过您的解决方案,但它也给了我以下错误:“XQuery [T.MY_XML.query()]: Attribute may not appear outside一个元素”
标签: sql sql-server xml tsql