首页 > 解决方案 > XML 到 SQL 表 - 得到空白

问题描述

问题

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

问题是,我无法从 XML 文件中获取值。我不断得到空白/空值。

我正在使用 SQL Server 2014 管理工作室。

我试过的

我研究了如何读取 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
------------------+----------
                  |   

标签: sqlsql-serverxmlxml-parsing

解决方案


想通了,

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

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

发现可以使用

;WITH XMLNAMESPACES(DEFAULT 'a-url')

考虑命名空间。


推荐阅读