2011-05-10 77 views
0

我试图运行查询,以便行集将返回元素的内容。下面是我的查询,以及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> 

回答

0

我认为你的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 

在我的测试情况下,这种方式似乎是工作。