1

我在 MyColumn 列的表格单元格中有以下 xml:

<BSDL xmlns="..." xmlns:i="...">
  <dateTime>2012-12-30T00:00:00Z</dateTime>
  <dateTime>2013-01-07T00:00:00Z</dateTime>
  <dateTime>2013-01-14T00:00:00Z</dateTime>
  <dateTime>2013-01-21T00:00:00Z</dateTime>
  <dateTime>2013-01-29T00:00:00Z</dateTime>
  <dateTime>2013-02-05T00:00:00Z</dateTime>
  <dateTime>2013-02-12T00:00:00Z</dateTime>
  <dateTime>2013-02-19T00:00:00Z</dateTime>
  <dateTime>2013-03-22T00:00:00Z</dateTime>
  <dateTime>2013-03-29T00:00:00Z</dateTime>
  <dateTime>2013-04-19T00:00:00Z</dateTime>
</BSDL>  

我只是尝试使用以下方法查询它(获取所有 xml 节点):

SELECT BSDL.item.value('(dateTime)[1]', 'datetime')
    from [MyTable]
    CROSS APPLY [MyColumn].nodes ('//BSDL') BSDL(item)  

它不会产生任何结果,尽管 my MyColumninMyTable对于每一行都有与上面相同数量的条目。

4

1 回答 1

1

由于只有一个<BSDL>节点 - 您的调用//BSDL选择该单个节点,然后item.value('(dateTime)[1]', 'datetime')返回第一<dateTime>个子节点。

您需要将 XQuery 更改为(使用xmlns=....您在此处的示例中提到的命名空间):

;WITH XMLNAMESPACES('.....' as ns)
SELECT 
    item.value('.', 'datetime')
from 
    dbo.MyTable
CROSS APPLY 
    MyColumn.nodes ('/ns:BSDL/ns:dateTime') BSDL(item)  

您需要获取所有<dateTime>节点的列表<BSDL>- 然后您将获得所有节点,并且可以一一检查它们。

于 2013-03-03T11:54:58.063 回答