sql - 从 SQL Server 表中查询 XML 数据

标签 sql sql-server xml

我已经尝试了与该主题相关的 SO 线程的所有建议,但仍然没有得到我需要的。我有一个名为 SC 的 XML 列.这是在 SQL Server 2014 上(以防万一)。表中只有一行,XML数据在SC列包含以下片段...

<SC_ROOT>
  <COMPONENTS>
    <COMPONENT>
      <NAME>Status A Detection</NAME>
      <PROPERTIES>
        <COMP_ENABLED>True</COMP_ENABLED>
      </PROPERTIES>
    </COMPONENT>
    ...
  </COMPONENTS>
</SC_ROOT>

我想用 <NAME> 返回一个表和 <COMP_ENABLED>仅适用于 <NAME>包含“检测”。如果已经有一个很好的例子,请指出我吗?提前致谢!

最佳答案

试试这个:

SELECT
    Name = xc.value('(NAME)[1]', 'varchar(50)'),
    CompEnabled = xc.value('(PROPERTIES/COMP_ENABLED)[1]', 'varchar(10)')
FROM 
    dbo.YourTable
CROSS APPLY
    SC.nodes('/SC_ROOT/COMPONENTS/COMPONENT') AS XT(XC)
WHERE
    xc.value('(NAME)[1]', 'varchar(50)') LIKE '%Detection'

.nodes()调用基本上返回一个带有表别名的“虚拟表”XT其中有一列(别名 XC )包含对应于 XPath 表达式的 XML 片段 - 基本上是 <COMPONENT> XML 片段。你伸手去提取你需要的详细信息

更新:如果您的 XML 如下所示:

<COMPONENT>
  <NAME>Status A Detection</NAME>
  <PROPERTIES NAME="COMP_ENABLED" VALUE="True" />
</COMPONENT>

然后使用这段代码得到结果:

SELECT
    Name = xc.value('(NAME)[1]', 'varchar(50)'),
    CompEnabled = xc.value('(PROPERTIES[@NAME="COMP_ENABLED"]/@VALUE)[1]', 'varchar(10)')
FROM 
    dbo.YourTable
CROSS APPLY
    SC.nodes('/SC_ROOT/COMPONENTS/COMPONENT') AS XT(XC)
WHERE
    xc.value('(NAME)[1]', 'varchar(50)') LIKE '%Detection'

关于sql - 从 SQL Server 表中查询 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701321/

相关文章:

PHP MYSQL 错误 : Unknown column 'status' in 'where clause'

sql-server - NHibernate下SQL Server死锁

php - 如何使用内容类型 :image/jpeg properly?

SQL性能: WHERE vs WHERE(ROW_NUMBER)

xml - JAXB 如何删除 JDK7 中的 ns2

java - 如何提高拆分 xml 文件的性能

android.widget.TextView 无法转换为 android.view.ViewGroup

php - 更新一组用户id

.net - 奇怪的 LINQ 异常

mysql - 什么是复合索引以及如何正确使用它?