首页 > 解决方案 > 如何将多个表作为一个 XML 返回?

问题描述

我有以下脚本:

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 转换为DataSet2 DataTables(一个用于列,另一个用于行)。我将使用它来填充DataGridView.

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

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

标签: c#sqlsql-serversql-server-2016

解决方案


根据我们拥有的数据,这将为您提供所需的结果:

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');

推荐阅读