编写查询以从SQL Server XML数据列中提取特定数据

时间:2011-05-10 17:11:05

标签: sql-server xml field

我正在尝试运行查询,以便行集将返回元素的内容。下面是我的查询,以及XML列中的数据样本。列Address中返回的内容全是NULL。但我知道表中的元素中有数据。我做错了什么。

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>

1 个答案:

答案 0 :(得分:0)

我认为你有一个错误的XML命名空间 - 你错过了结束.../envelope。此外,似乎你不能在XQuery中使用“soap”作为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

在我的测试用例中,这种方式似乎有效。