从SQL中的XML文件检索属性

时间:2019-05-02 13:20:13

标签: sql sql-server xml tsql

我正在尝试从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_NAMECURRENCY_CODE以及该节点中的所有其他元素(我可以提取该元素)现在)。

1 个答案:

答案 0 :(得分:0)

您可以使用values[0]将XML拆分为元素值,然后使用nodes提取所需的值:

value

结果:

enter image description here

如果您有更多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>

这是结果:

enter image description here