编写查询以从SQL Server XML数据列中提取特定数据
问题描述:
我试图运行查询,以便行集将返回元素的内容。下面是我的查询,以及XML列中的数据示例。在Address列中返回的是全部NULL。但我知道表格中的元素有数据。我究竟做错了什么。编写查询以从SQL Server XML数据列中提取特定数据
WITH XMLNAMESPACES('http://schemas.xmlsoap.org/soap' AS "soap")
SELECT
Data.value('(/soap:Envelope/soap:Body/Report/Location/Address/node())[1]', 'nvarchar(max)') as Address
FROM Mytable
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Report>
<Location>
<Address>600 BENNETT ST</Address>
</Location>
</Report>
<soap:Body>
<soap:Envelope>
答
我认为你的XML命名空间错了 - 你错过了关闭.../envelope
。另外,看起来你不能使用“soap”作为XQuery中的XML名称空间别名 - 不知道为什么。
试试这个:
;WITH XMLNAMESPACES('http://schemas.xmlsoap.org/soap/envelope/' AS se)
SELECT
Data.value('(/se:Envelope/se:Body/Report/Location/Address/text())[1]', 'nvarchar(max)')
AS 'Address'
FROM Mytable
在我的测试情况下,这种方式似乎是工作。