Sql Server 2005中的XQuery - 找到相同位置的节点

时间:2011-04-04 00:02:36

标签: sql-server xquery-sql

我正在尝试解决以下问题,导致表示数据库中计算的对象的序列化。 我正在尝试执行查询以进行报告,并且需要在XML层次结构的不同部分中找到位于相同位置的节点(这些节点来自对象的string[]double[]属性的序列化)。 例如,我有类似

的东西
...<parent>
      <Names>
        <string>Name1</string>
        <string>Name2</string>
        <string>Name3</string>
      </Names>

and

...<parent>
      <Weights>
         <double>0.5</double>
         <double>0.13</double>
         <double>0.2</double>
      </Weights>

我希望能够查询XML blob并为每个XML blob提取Name-Weight对,以便我可以在SQL中查询而不必反序列化对象。我可以拉出名字,我可以拉出权重,但是如果我将它们组合起来就会出现一个交叉查询,因为我正在努力使它们在位置匹配。我认为答案可能是创建两个视图,一个用于名称,一个用于权重,并将它们连接到位置,但在查询中不允许position(),除非它类似于[position() < 6]

1 个答案:

答案 0 :(得分:0)

通过创建2个单独的视图然后创建聚合视图来解决问题。我用了

ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Id) as ItemPosition

作为每个查询/视图中的一列。然后我加入了Id和ItemPosition。不确定这是否是最佳方式,但至少它是匹配相关项目。