问题
我需要从另一个应用程序提供的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
------------------+----------
|
答案 0 :(得分:1)
弄清楚了,
<DistributionOrder xmlns="a-url">
</DistributionOrder>
是问题所在。我从xml中删除了xmlns =“ a-url”,发现我的代码正在运行。
发现可以使用
;WITH XMLNAMESPACES(DEFAULT 'a-url')
要考虑名称空间。