как построить правильный вложенный XML в SQL сервер - PullRequest
0 голосов
/ 02 марта 2020

THIS is my query

THIS is MY RESULT

Я хочу, чтобы тег DECLARATION закрывался за ENCOURS и перед TCN, как это сделать, пожалуйста?

1 Ответ

0 голосов
/ 02 марта 2020

Я нагнулся и набрал для вас (вместо вас) набор DDL и выборку данных.

SQL

-- DDL and sample data population, start
DECLARE @ENTETE TABLE (CIB_DECLARANT INT, Type_Fischier VARCHAR(30), numero_de_remise INT, date_declaration DATE);
INSERT INTO @ENTETE (CIB_DECLARANT, Type_Fischier, numero_de_remise, date_declaration) 
VALUES (10057, 'DECLARATION_TCN', 1, '2019-12-03');

DECLARE @DECLARATION TABLE (siren_emetteur INT);
INSERT INTO @DECLARATION (siren_emetteur) 
VALUES (12345);

DECLARE @CARATERISTIQUE_TITRE TABLE (type_mouvement CHAR(1), code_isin VARCHAR(30));
INSERT INTO @CARATERISTIQUE_TITRE (type_mouvement, code_isin)
VALUES ('C', 'fr12345');

DECLARE @MOUVEMENT_TITRE TABLE (type_mouvement CHAR(1), code_isin VARCHAR(30));
INSERT INTO @MOUVEMENT_TITRE (type_mouvement, code_isin)
VALUES ('C', 'fr400016');

DECLARE @ENCOURS TABLE (code_devise CHAR(3), montant_encours INT);
INSERT INTO @ENCOURS (code_devise, montant_encours)
VALUES ('EUR', 0);
-- DDL and sample data population, end

SELECT
(
    SELECT *
    FROM @ENTETE
    FOR XML PATH('ENTETE'), TYPE
    )
    , (
    SELECT *
        , (
        SELECT *
        FROM @CARATERISTIQUE_TITRE
        FOR XML PATH('CARATERISTIQUE_TITRE'), TYPE
        )
        , (
        SELECT *
        FROM @MOUVEMENT_TITRE
        FOR XML PATH('MOUVEMENT_TITRE'), TYPE
        )
        , (
        SELECT *
        FROM @ENCOURS
        FOR XML PATH('ENCOURS'), TYPE
        )
    FROM @DECLARATION
    FOR XML PATH('DECLARATION'), TYPE
)
FOR XML PATH(''), TYPE, ROOT('TCN');

Вывод

<TCN>
  <ENTETE>
    <CIB_DECLARANT>10057</CIB_DECLARANT>
    <Type_Fischier>DECLARATION_TCN</Type_Fischier>
    <numero_de_remise>1</numero_de_remise>
    <date_declaration>2019-12-03</date_declaration>
  </ENTETE>
  <DECLARATION>
    <siren_emetteur>12345</siren_emetteur>
    <CARATERISTIQUE_TITRE>
      <type_mouvement>C</type_mouvement>
      <code_isin>fr12345</code_isin>
    </CARATERISTIQUE_TITRE>
    <MOUVEMENT_TITRE>
      <type_mouvement>C</type_mouvement>
      <code_isin>fr400016</code_isin>
    </MOUVEMENT_TITRE>
    <ENCOURS>
      <code_devise>EUR</code_devise>
      <montant_encours>0</montant_encours>
    </ENCOURS>
  </DECLARATION>
</TCN>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...