在Sql Server中查询XML数据(属性)

时间:2014-02-17 15:00:40

标签: xml sql-server-2012 xquery

我在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。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

XQuery中的索引从1开始而不是0.我建议首先尝试从查询中替换:

(/ns1:ClassificationTree/@version)[0]

为:

(/ns1:ClassificationTree/@version)[1]

然而你可能想要的是 -

/ns1:ClassificationTree[1]/@version

如果您想从第一个ClassificationTree中获取version属性。您正在做的是检索所有ClassificationTrees的所有版本,然后选择第一个(或者如果您使用[1]而不是[0],则选择效率低得多)。