【问题标题】:Sql Server 2008 Shredding XMLSql Server 2008 粉碎 XML
【发布时间】:2012-02-03 11:58:46
【问题描述】:

您好,我有一些这样的 XML...

<Questions>
  <Question1>A</Question1>
  <Question2>B</Question2>
  <Question3>C</Question3>
</Questions>

我想退回 A,B,C。我见过一些类似的问题,但那些具有相同的重复节点名称。不幸的是,在这个阶段我无法改变它。我玩过 AGES 的 SQL Xpath 语法,但没有运气。我可以获得整个问题节点,但理想情况下我想要实际数据。多个返回的行也可以。

任何帮助将不胜感激。

更新 - 基里尔的答案非常接近,除了我在表中有超过 1 条记录并且它返回 1 行内的所有记录数据。如果我能实现一个完美的行/xml文件!通过从该记录输出另一个字段,例如rownum 或从文件中输出另一条数据,例如个人资料名称..

谢谢,

阿德里安 !

【问题讨论】:

    标签: sql xml tsql xpath xquery


    【解决方案1】:
    declare @x xml = N'<Questions>
      <Question1>A</Question1>
      <Question2>B</Question2>
      <Question3>C</Question3>
    </Questions>
    '
    
    SELECT x.value('.','varchar(10)')
    FROM @x.nodes('/Questions/*') x(x)
    

    输出

    ----------
    A
    B
    C
    

    【讨论】:

      【解决方案2】:

      继续 Martin 的解决方案,并从 this 获得一些灵感:

      declare @x xml = N'<Questions>
        <Question1>A</Question1>
        <Question2>B</Question2>
        <Question3>C</Question3>
      </Questions>
      '
      
      DECLARE @Questions VARCHAR(MAX)
      
      SELECT @Questions = COALESCE(@Questions + ', ', '') + Question
      FROM (
          SELECT x.value('.','varchar(10)') as Question
          FROM @x.nodes('/Questions/*') x(x)
      ) as y
      
      SELECT @Questions
      

      输出:

      A, B, C
      

      【讨论】:

        【解决方案3】:

        用途:

        declare @x xml ='
        <Questions>
          <Question1>A</Question1>
          <Question2>B</Question2>
          <Question3>C</Question3>
        </Questions>'
        
        select @x.value('(/*/Question1)[1]', 'nvarchar(max)')
            , @x.value('(/*/Question2)[1]', 'nvarchar(max)')
            , @x.value('(/*/Question3)[1]', 'nvarchar(max)')
        

        输出:

        ---- ---- ----
        A    B    C
        

        【讨论】:

          【解决方案4】:
          select stuff(
          (
              select ',' + x.value('.', 'varchar(10)') [text()]
              from @x.nodes('/*/*') x(x)
              for xml path(''))
          , 1, 1, '')
          

          输出:

          A,B,C
          

          【讨论】:

          • 这很好,除了我使用的是表格并且此代码返回 1 行上的所有记录数据。我需要 1 行上的每个 XML 文件数据。
          • @AdrianTurner,提供一些样本。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多