SQL - 从表字段中读取XML节点

时间:2013-05-06 05:55:48

标签: sql-server xml sql-server-2008

我正在使用SQL Server 2008.我的一个名为RequestParameters的SQL表中有一个名为Requests的字段,带有XML数据。一个例子是:

<RequestParameters xmlns="http://schemas.datacontract.org/2004/07/My.Name.Space" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="1">
  <Data z:Id="2" i:type="CheckoutRequest">
    <UserGuid>7ec38c44-5aa6-49e6-9fc7-25e9028f2148</UserGuid>
    <DefaultData i:nil="true" />
  </Data>
</RequestParameters>

我最终想要检索UserGuid的值。为此,我这样做:

SELECT RequestParameters.value('(/RequestParameters/Data/UserGuid)[0]', 'uniqueidentifier') as UserGuid
FROM Requests

但是,我看到的结果都是NULL。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您必须指定默认命名空间并使用[1]而不是[0]

WITH XMLNAMESPACES(default 'http://schemas.datacontract.org/2004/07/My.Name.Space')
SELECT RequestParameters.value('(/RequestParameters/Data/UserGuid)[1]', 'uniqueidentifier') as UserGuid
FROM Requests;

SQL Fiddle

答案 1 :(得分:-1)

  declare @XML xml

  set @XML = "<RequestParameters       xmlns="http://schemas.datacontract.org/2004/07/My.Name.Space"       xmlns:i="http://www.w3.org/2001/XMLSchema-instance"       xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="1">
    <Data z:Id="2" i:type="CheckoutRequest">
      <UserGuid>7ec38c44-5aa6-49e6-9fc7-25e9028f2148</UserGuid>
      <DefaultData i:nil="true" />
    </Data>
  </RequestParameters>"

 select @XML.value('(/RequestParameters/Data /UserGuid)[1]', 'varchar')
  '