我在Sql Server的Xml列中有一些XML,我希望在其上提供一个视图。具体来说,我想将根元素的“version”属性与整个XML块本身一起公开。
该表有一个名为“Tree”的列。
XML看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<ClassificationTree xmlns="http://schemas.tempuri.org/2014/02/17" version="1.0">
<Classification name="WTG" priority="1">
<Classification name="Corrective" priority="1">
<Classification name="RDSPP-Codes" priority="1" />
</Classification>
<Classification name="Predetermined" priority="2">
<Classification name="Non Service related (tests, visits etc)" priority="1" />
<Classification name="Scheduled Service" priority="2" />
</Classification>
</Classification>
</ClassificationTree>
当我这样查询时:
WITH XMLNAMESPACES ('http://schemas.tempuri.org/2014/02/17' AS ns1)
select
Tree.value('(/ns1:ClassificationTree/@version)[0]','varchar(20)') as Version
, Tree
from
ClassificationTree
我得到了Xml-chunk,但是“version”-column是NULL。
我在这里缺少什么?
答案 0 :(得分:2)
XQuery中的索引从1开始而不是0.我建议首先尝试从查询中替换:
(/ns1:ClassificationTree/@version)[0]
为:
(/ns1:ClassificationTree/@version)[1]
然而你可能想要的是 -
/ns1:ClassificationTree[1]/@version
如果您想从第一个ClassificationTree中获取version属性。您正在做的是检索所有ClassificationTrees的所有版本,然后选择第一个(或者如果您使用[1]
而不是[0]
,则选择效率低得多)。