【问题标题】:How to return multiple tables as one XML?如何将多个表作为一个 XML 返回?
【发布时间】:2019-01-24 09:07:31
【问题描述】:

我有以下脚本:

DECLARE @columns TABLE (
    Caption varchar(50),
    Width int);

INSERT INTO @columns 
VALUES ('Id', 0), ('Name', 100);

DECLARE @rows TABLE (
    Id int,
    [Name] varchar(50));

INSERT INTO @rows 
VALUES (1, 'John'), (2, 'Steve');

SELECT *,
    (SELECT *
     FROM @rows
     FOR XML PATH('Row'), ROOT('Rows'), TYPE, ELEMENTS)
FROM @columns
FOR XML PATH('Column'), ROOT('Results'), TYPE, ELEMENTS;

我需要返回以下 XML:

<Results>
    <Columns>
        <Column>
            <Caption>Id</Caption>
            <Width>0</Width>
        </Column>
        <Column>
            <Caption>Name</Caption>
            <Width>100</Width>
        </Column>
    </Columns>
    <Rows>
        <Row>
            <Id>1</Id>
            <Name>John</Name>
        </Row>
        <Row>
            <Id>2</Id>
            <Name>Steve</Name>
        </Row>
    </Rows>
</Results>

我的想法是我将 XML 转换为带有 2 个DataTablesDataSet(一个用于列,另一个用于行)。我将使用它来填充DataGridView

但是,我的问题是我当前生成的 XML 格式不正确,与我预期的不一样。

按预期生成 XML 的正确语法是什么?

【问题讨论】:

    标签: c# sql sql-server sql-server-2016


    【解决方案1】:

    这会根据我们拥有的数据为您提供您想要的结果:

    SELECT (SELECT Caption,
                   Width
            FROM @columns
            FOR XML PATH('Column'),TYPE) AS [Columns],
           (SELECT Id,
                   [Name]
            FROM @rows
            FOR XML PATH('Row'),TYPE) AS [Rows]
    FOR XML PATH ('Results');
    

    【讨论】:

      【解决方案2】:

      此查询生成的结果完全符合您的预期:

      SELECT (SELECT clm.Caption,
                     clm.Width
              FROM @columns clm
              FOR XML PATH('Column'), TYPE) AS Columns,
             (SELECT rs.Id,
                     rs.[Name]
              FROM @rows rs
              FOR XML PATH('Row'),TYPE) AS [Rows]
      FOR XML PATH ('Results');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-22
        • 2014-10-19
        • 2017-05-12
        • 1970-01-01
        • 2019-11-16
        • 2019-11-18
        • 2013-05-16
        • 2020-04-24
        相关资源
        最近更新 更多