【问题标题】:Easiest way to query a SQL Server 2008 R2 XML data type?查询 SQL Server 2008 R2 XML 数据类型的最简单方法?
【发布时间】:2014-10-24 12:41:02
【问题描述】:

我需要在 XML 数据类型列中获取节点值。

<CustomContentData>
  <prpIsRSSFeed>false</prpIsRSSFeed>
</CustomContentData>

这是如何在 SQL Server 中完成的?

列名是ClassXML

【问题讨论】:

    标签: sql sql-server xml sql-server-2008-r2


    【解决方案1】:

    使用XQuery,您的数据的一个简单示例是:

    DECLARE @T TABLE (ClassXML XML);
    INSERT @T (ClassXML) 
    VALUES  ('<CustomContentData>
                <prpIsRSSFeed>false</prpIsRSSFeed>
            </CustomContentData>');
    
    SELECT  t.ClassXML.value('CustomContentData[1]/prpIsRSSFeed[1]', 'VARCHAR(5)')
    FROM    @T AS t;
    

    【讨论】:

      【解决方案2】:

      如果列在 SQL Server 中已经是 XML 数据类型,那么下面的代码应该可以通过使用带有 XPATH 的值函数来工作。如果它存储为 varchar,则只需将 ClassXML.value 替换为 CONVERT(XML, ClassXML).value。希望这会有所帮助!

      DECLARE @Data TABLE (ClassXML XML)
      INSERT @Data VALUES ('<CustomContentData><prpIsRSSFeed>false</prpIsRSSFeed></CustomContentData>')
      
      SELECT
          CONVERT(BIT, CASE WHEN ClassXML.value ('(/CustomContentData/prpIsRSSFeed)[1]',
              'VARCHAR(50)') = 'true' THEN 1 ELSE 0 END) AS IsRssFeed
      FROM @Data
      

      产量输出

      IsRssFeed
      ---------
      0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多