Как вернуть несколько таблиц в один XML? - PullRequest
0 голосов
/ 24 января 2019

У меня есть следующий скрипт:

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 в DataSetс 2 DataTables (один для столбцов, а другой для строк).Я буду использовать это для заполнения DataGridView.

Однако моя проблема заключается в том, что генерируемый в данный момент XML-файл искажен и не соответствует ожидаемому.

Каков правильный синтаксис для генерации XML, как и ожидалось?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Этот запрос генерирует именно тот результат, который вы ожидали:

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');
0 голосов
/ 24 января 2019

Это дает вам желаемый результат, на основе на основе данных, которые мы имеем:

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