Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
作为结果集查询xml列的一部分_Xml_Sql Server 2008 - Fatal编程技术网

作为结果集查询xml列的一部分

作为结果集查询xml列的一部分,xml,sql-server-2008,Xml,Sql Server 2008,如何获取xml列的一部分,并在SQL中将其作为自己的结果集返回 我的数据库中有一个xml文件,如下所示: <main> <data> <rows> <_items> <columns> <values> <keyvaluepairs> <keyvaluepairofstringstring>

如何获取xml列的一部分,并在SQL中将其作为自己的结果集返回

我的数据库中有一个xml文件,如下所示:

<main>
  <data>
    <rows>
      <_items>
        <columns>
          <values>
            <keyvaluepairs>
              <keyvaluepairofstringstring>
                <key>EVENT</key>
                <value>Wedding</value>              
              </keyvaluepairofstringstring>
              <keyvaluepairofstringstring>
                <key>DETAIL</key>
                <value>Smith-Wesson</value>              
              </keyvaluepairofstringstring>
            </keyvaluepairs>              
          </values>
        </columns>
        <columns>
          <values>
            <keyvaluepairs>
              <keyvaluepairofstringstring>
                <key>EVENT</key>
                <value>Reunion</value>              
              </keyvaluepairofstringstring>
              <keyvaluepairofstringstring>
                <key>DETAIL</key>
                <value>Class of 1996</value>              
              </keyvaluepairofstringstring>
            </keyvaluepairs>
          </values>
        </columns>
        <columns>
          <values>
            <keyvaluepairs>
              <keyvaluepairofstringstring>
                <key>EVENT</key>
                <value>Pie-throwing contest</value>              
              </keyvaluepairofstringstring>
              <keyvaluepairofstringstring>
                <key>DETAIL</key>
                <value>Cherry pies</value>              
              </keyvaluepairofstringstring>
            </keyvaluepairs>              
          </values>
        </columns>
      </_items>
    </rows>
  </data>
</main>
EVENT                   NAME
Wedding                 Smith-Wesson
Reunion                 Class of 1996
Pie-throwing contest    Cherry pies
...etc...
我正在使用该方法查询单个值,但这还不足以获取我真正需要的所有数据

我正在使用SQLServer2008

编辑:为了澄清,此xml包含在一行中。例如,要返回上面的xml,我需要键入

select my_xml_column from my_table;
试试这个:

select X.N.value('(keyvaluepairofstringstring/value[../key = "EVENT"])[1]', 'varchar(100)') as EVENT,
       X.N.value('(keyvaluepairofstringstring/value[../key = "DETAIL"])[1]', 'varchar(100)') as NAME
from YourTable as T
  cross apply T.XMLCol.nodes('/main/data/rows/_items/columns/values/keyvaluepairs') as X(N)
在此处测试:


顺便说一句,我必须修复你的XML。这里有一些缺少的结束标记。

您是查询单个XML字符串,还是查询一组行?而且您的XML看起来也不对:SQL server不接受此XML数据类型。XML错误已修复。我改变了周围的标签和数据,使其匿名化了一点,并搞错了一个结束标签。这包含在sql server中XML类型的列中,包含在一行中。谢谢(我修复了xml结束标记)