【问题标题】:Getting values from XML type field using in SQL server使用 SQL Server 从 XML 类型字段中获取值
【发布时间】:2011-09-26 16:48:28
【问题描述】:

我有一个包含 XML 类型字段的 MS SQL 表。该字段的数据格式如下:

<doc>
   <quote>
      <code>AA</code>
   </quote>
   <quote>
      <code>BB</code>
   </quote>
   <quote>
      <code>CC</code>
   </quote>
</doc>

引号可以有不同的顺序。我需要查看以下格式的数据,该数据显示每个文档的哪个报价排在第一位。

Code 1       Code 2        Code 3
--------------------------------
   AA         BB          CC
   BB         AA          CC

【问题讨论】:

    标签: sql xml sql-server-2005 tsql xquery


    【解决方案1】:

    试试这个:

    DECLARE @test TABLE(ID INT, XmlCol XML)
    
    INSERT INTO @test VALUES(1, '<doc>
       <quote>
          <code>AA</code>
       </quote>
       <quote>
          <code>BB</code>
       </quote>
       <quote>
          <code>CC</code>
       </quote>
    </doc>')
    
    INSERT INTO @test VALUES(2, '<doc>
       <quote>
          <code>BB</code>
       </quote>
       <quote>
          <code>AA</code>
       </quote>
       <quote>
          <code>CC</code>
       </quote>
    </doc>')
    
    SELECT
        ID,
        X.Doc.value('(quote/code)[1]', 'varchar(20)') AS 'Code1',
        X.Doc.value('(quote/code)[2]', 'varchar(20)') AS 'Code2',
        X.Doc.value('(quote/code)[3]', 'varchar(20)') AS 'Code3'
    FROM @test
    CROSS APPLY xmlcol.nodes('doc') AS X(Doc)
    

    给你一个输出:

    ID  Code1   Code2   Code3
    1   AA  BB  CC
    2   BB  AA  CC
    

    【讨论】:

      【解决方案2】:
      declare @x xml = '<doc>
         <quote>
            <code>AA</code>
         </quote>
         <quote>
            <code>BB</code>
         </quote>
         <quote>
            <code>CC</code>
         </quote>
      </doc>';
      
      select @x.value('(doc/quote/code)[1]', 'varchar(max)')
          , @x.value('(doc/quote/code)[2]', 'varchar(max)')
          , @x.value('(doc/quote/code)[3]', 'varchar(max)')
      

      对于@marc_s,

      DECLARE @test TABLE(ID INT, XmlCol XML)
      
      INSERT INTO @test VALUES(1, '<doc>
         <quote>
            <code>AA</code>
         </quote>
         <quote>
            <code>BB</code>
         </quote>
         <quote>
            <code>CC</code>
         </quote>
      </doc>')
      
      INSERT INTO @test VALUES(2, '<doc>
         <quote>
            <code>BB</code>
         </quote>
         <quote>
            <code>AA</code>
         </quote>
         <quote>
            <code>CC</code>
         </quote>
      </doc>')
      
      
      
      
      SELECT
          ID,
          XmlCol.value('(doc/quote/code)[1]', 'varchar(20)') AS 'Code1',
          XmlCol.value('(doc/quote/code)[2]', 'varchar(20)') AS 'Code2',
          XmlCol.value('(doc/quote/code)[3]', 'varchar(20)') AS 'Code3'
      FROM @test
      

      【讨论】:

      • 好的,在这种情况下,当您的 XML 列中有一个 &lt;doc&gt; 节点时 - 是的,它可以工作。
      猜你喜欢
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2011-11-15
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多