【问题标题】:SQL Server : nesting elements with FOR XML PATHSQL Server:使用 FOR XML PATH 嵌套元素
【发布时间】:2014-11-04 09:55:22
【问题描述】:

我想嵌套我的每个 XML 元素。

举个例子:

DECLARE @TempTable TABLE
(
    [Column1] char(10),
    [Column2] char(10)
);

INSERT INTO @TempTable([Column1], [Column2]) VALUES
('some value', 'some value'),
('some value', 'some value'),
('some value', 'some value'),
('some value', 'some value')

SELECT (
    SELECT * FROM @TempTable
FOR XML PATH('Row'), TYPE)
FOR XML PATH('ParentRow'), ROOT('Root')

这将返回以下 XML:

  <Root>
    <ParentRow>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
    </ParentRow>
  </Root>

这不是我希望格式化 XML 的方式。相反,我希望每个&lt;Row&gt; 元素都用&lt;ParentRow&gt; 元素包裹,如下所示:

  <Root>
    <ParentRow>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
    </ParentRow>
    <ParentRow>
    <Row>
      <Column1>some value</Column1>
      <Column2>some value</Column2>
    </Row>
    </ParentRow>
    <ParentRow>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
    </ParentRow>
    <ParentRow>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
    </ParentRow>
  </Root>    

对这些人有帮助吗?

【问题讨论】:

    标签: sql sql-server xml nested for-xml-path


    【解决方案1】:

    好的,这里是代码。

    DECLARE @TempTable TABLE
    (
        [Column1] char(10),
        [Column2] char(10)
    );
    
    INSERT INTO @TempTable([Column1], [Column2]) VALUES
    ('some value', 'some value'),
    ('some value', 'some value'),
    ('some value', 'some value'),
    ('some value', 'some value')
    
    SELECT (
            SELECT (
                    SELECT T1.*
                    FOR XML path('')
                        ,root('Row')
                        ,type
                    )
            FROM @TempTable AS T1
            FOR XML path('ParentRow')
                ,type
            )
    FOR XML path('Root')
    

    这是输出。

    <Root>
      <ParentRow>
        <Row>
          <Column1>some value</Column1>
          <Column2>some value</Column2>
        </Row>
      </ParentRow>
      <ParentRow>
        <Row>
          <Column1>some value</Column1>
          <Column2>some value</Column2>
        </Row>
      </ParentRow>
      <ParentRow>
        <Row>
          <Column1>some value</Column1>
          <Column2>some value</Column2>
        </Row>
      </ParentRow>
      <ParentRow>
        <Row>
          <Column1>some value</Column1>
          <Column2>some value</Column2>
        </Row>
      </ParentRow>
    </Root>
    

    祝你好运……

    【讨论】:

      【解决方案2】:
      SELECT (SELECT * FROM @TempTable
              WHERE t.Column1 = Column1
              FOR XML PATH('ParentRow'),ROOT('Row'), TYPE)
      FROM @TempTable t
      FOR XML PATH(''), ROOT('Root')
      

      结果

      <Root>
        <Row>
          <ParentRow>
            <Column1>some value1</Column1>
            <Column2>some value </Column2>
          </ParentRow>
        </Row>
        <Row>
          <ParentRow>
            <Column1>some value2</Column1>
            <Column2>some value </Column2>
          </ParentRow>
        </Row>
        <Row>
          <ParentRow>
            <Column1>some value3</Column1>
            <Column2>some value </Column2>
          </ParentRow>
        </Row>
        <Row>
          <ParentRow>
            <Column1>some value4</Column1>
            <Column2>some value </Column2>
          </ParentRow>
        </Row>
      </Root>
      

      【讨论】:

      • 当我运行该查询时,我没有得到您在上面粘贴的结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2011-07-22
      相关资源
      最近更新 更多