XML到SQL表-空白

时间:2019-07-03 01:17:59

标签: sql sql-server xml xml-parsing

问题

我需要从另一个应用程序提供的XML文件中获取数据。这些XML包含需要插入到其他应用程序的数据库表中的数据。

问题是这样的,我无法从XML文件中获取值。我一直在获取空白/空值。

我正在使用SQL Server 2014 Management Studio。

我尝试过的事情

我研究了如何读取XML并将其放入表格中。我已经深入研究了有效的教程。但是,每当我尝试对表应用相同的过程并使用XML数据时,我总是会得到空值。

由于我一直在研究这一天并研究如何使用MS SQL来解决此问题,因此将不胜感激。而且我一生都无法理解为什么我不断得到空值。

XML

<DistributionOrder xmlns="a-url">
    <Date>2019-03-07T14:38:00</Date>
    <Order_Number>ACME01</Order_Number>
    <Comment/>
    <Status>Active</Status>
    <Lines>
        <Line>
            <Order_Line_Number>1</Order_Line_Number>
            <Product>22</Product>
            <Status_Line>Active</Status_Line>
            <Comment_Line/>
            <Location>ENT_78</Location>
        </Line>
    </Lines>
</DistributionOrder>

查询

DECLARE @xmlData XML;

INSERT INTO dbo.XMLwithOpenXML(XML_data)
    SELECT * 
    FROM OPENROWSET(BULK 'C:\test_file.xml', SINGLE_BLOB) AS ImportSource;

SELECT * FROM XMLwithOpenXML;

SELECT
    element.value('(Order_Line_Number/text())[1]', 'nvarchar(80)') AS Order_Line_Number,
    element.value('(Product/text())[1]', 'nvarchar(80)') AS Product
FROM
    XMLwithOpenXML 
CROSS APPLY
    XML_data.nodes('DistributionOrder/Lines/Line') AS DO(element)
GO

我期望的结果

Order_Line_Number | Product
------------------+----------
        1         |   22

我能得到的

Order_Line_Number | Product
------------------+----------
                  |   

1 个答案:

答案 0 :(得分:1)

弄清楚了,

<DistributionOrder xmlns="a-url">
</DistributionOrder>

是问题所在。我从xml中删除了xmlns =“ a-url”,发现我的代码正在运行。

发现可以使用

;WITH XMLNAMESPACES(DEFAULT 'a-url')

要考虑名称空间。