Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XQuery访问SQLXML列中的子节点_Xquery_Sqlxml - Fatal编程技术网

使用XQuery访问SQLXML列中的子节点

使用XQuery访问SQLXML列中的子节点,xquery,sqlxml,Xquery,Sqlxml,我有一个数据库,它有一个带有XML列的表。XML数据有一组子节点,这些子节点如下所示: <test> <result id="1234"> <data elementname="Message">some error message</data> <data elementname="Cat">Cat01</data> <data elementname="Type">WARNING&

我有一个数据库,它有一个带有XML列的表。XML数据有一组子节点,这些子节点如下所示:

<test>
  <result id="1234">
    <data elementname="Message">some error message</data>
    <data elementname="Cat">Cat01</data>
    <data elementname="Type">WARNING</data>
  </result>
  <result id="5678">
    <data elementname="Message">some error message</data>
    <data elementname="Cat">Cat01</data>
    <data elementname="Type">WARNING</data>
  </result>
</test>
这可以正确地获取具有这种分类类型的表中的所有行(在没有该元素的同一个表中会有其他结果),但对于每个表记录,这些类别都组合到一列中:

Id1, <data elementname="Cat">Cat01</data><data elementname="Cat">Cat01</data>
Id2, <data elementname="Cat">Cat01</data><data elementname="Cat">Cat01</data>
Id1,Cat01Cat01
Id2,Cat01Cat01
我包含了Id列,因此很容易看到数据来自何处,主要问题是我只能让它连接每行的值-我需要这些数据元素中的每一个都有自己的行,然后可能对结果执行Select Distinct

我有办法做到吗

谢谢

在您发布问题后,请始终使用谷歌

我想我在这里找到了答案:

似乎关键是交叉应用关键字

Id1, <data elementname="Cat">Cat01</data><data elementname="Cat">Cat01</data>
Id2, <data elementname="Cat">Cat01</data><data elementname="Cat">Cat01</data>
SELECT  DISTINCT  cref.value('(text())[1]', 'varchar(50)') as Cat
FROM   
      SGIS CROSS APPLY 
      Data.nodes('/test/result') AS Results(rref) CROSS APPLY
      rref.nodes('data[@elementname = ''Cat'']') AS Categories(cref)