我在表格单元格的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)
虽然MyColumn
中的MyTable
与上面的条目数相同,但每行都没有结果。
答案 0 :(得分: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>
个节点的列表 - 然后您将获得全部,并且您可以逐个检查它们。