SQL ЗА XML Повтор Root Узел - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь использовать предложение SQL FOR XML для генерации пользовательского XML в качестве вывода для использования в SSIS. Я очень близко Я не могу найти ничего по «типу» вариант. По какой-то причине «тип» приближает меня. Помощь очень ценится. Требуемый вывод такой:

<NLS CommitBlock="1" EnforceTagExistence="1">
  <LOAN loannumber="892127" acctrefno="145415" />
  <LOAN loannumber="892130" acctrefno="145418" />
  <LOAN loannumber="892131" acctrefno="145419" />
</NLS>

Вывод, который я получаю, такой:

<NLS CommitBlock="1" EnforceTagExistence="1">
  <LOAN loannumber="892127" acctrefno="145415" />
</NLS>
<NLS CommitBlock="1" EnforceTagExistence="1">
  <LOAN loannumber="892130" acctrefno="145418" />
</NLS>
<NLS CommitBlock="1" EnforceTagExistence="1">
  <LOAN loannumber="892131" acctrefno="145419" />
</NLS>

My SQL это.

SELECT  TOP (3) 
'1' AS 'CommitBlock',
'1' AS 'EnforceTagExistence',
(SELECT
vw_deferments.loan_number AS '@loannumber',
vw_deferments.acctrefno AS '@acctrefno'
FOR XML Path('LOAN'), type)
FROM            vw_deferments INNER JOIN
                loanacct ON vw_deferments.acctrefno = Iloanacct.acctrefno
WHERE (vw_deferments.Loan_Status IN ('PAYING', 'REPO REVIEW', 'REPO ASSIGN')) 
-- tons of irrelevant AND clauses are here
FOR XML RAW('NLS')

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете использовать это с лучшим отступом, чтобы ясно видеть, что он собирается производить:

SELECT 
    [NLS/@CommitBlock]          = 1,
    [NLS/@EnforceTagExistence]  = 1,
    [NLS] = (
             SELECT
                    [@loannumber] = vw_deferments.loan_number,
                    [@acctrefno]  = vw_deferments.acctrefno
             FROM vw_deferments
             JOIN loanacct ON vw_deferments.acctrefno = Iloanacct.acctrefno
             WHERE 
                  (vw_deferments.Loan_Status IN ('PAYING', 'REPO REVIEW', 'REPO ASSIGN')) 
                  -- -- tons of irrelevant AND clauses are here
             FOR XML PATH('LOAN'), type
            )
FOR XML PATH('')
0 голосов
/ 28 апреля 2020

Без предоставления DDL и выборки данных я разработал следующий концептуальный пример:

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, loannumber VARCHAR(10), acctrefno VARCHAR(10));
INSERT INTO @tbl (loannumber, acctrefno)
VALUES
('892127','145415')
,('892130','145418')
,('892131','145419');
-- DDL and sample data population, end

SELECT TOP(1) '1' AS [@CommitBlock], '1' AS [@EnforceTagExistence]
, (
    SELECT loannumber AS [@loannumber]
        , acctrefno AS [@xacctrefno]
    FROM @tbl
    FOR XML PATH('LOAN'), TYPE
)
FROM @tbl
FOR XML PATH('NLS'), TYPE;

Вывод

<NLS CommitBlock="1" EnforceTagExistence="1">
  <LOAN loannumber="892127" xacctrefno="145415" />
  <LOAN loannumber="892130" xacctrefno="145418" />
  <LOAN loannumber="892131" xacctrefno="145419" />
</NLS>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...