Eu tenho o seguinte código desenvolvendo 2 arquivos XML, mas gostaria que eles estivessem em um arquivo com várias tags de organização.
SELECT
LTRIM(RTRIM(c1.cptname)) as "orgHeader/orgCode",
LTRIM(RTRIM(c1.cptname)) as "orgHeader/longName",
LTRIM(RTRIM(c1.cptname)) as "orgHeader/shortName",
'Branch' as "orgRole",
(
SELECT system, extCode from
(
Select 'a' AS 'system', LTRIM(RTRIM(c1.cptname)) AS
'extCode'
UNION ALL
Select 'b' AS 'system', LTRIM(RTRIM(c1.cptname)) AS
'extCode'
UNION ALL
Select 'Manual' AS 'system', LTRIM(RTRIM(c1.cptname)) AS
'extCode'
) a
FOR XML PATH('externalCode'), TYPE, ELEMENTS,Root('externalCodes')
)
from cpt c1
where cptleagname like '%abc%'
and cptcod IN (select cptcod from pf_map
where pf IN ('abc','abc-jp')
and stat = 'a')
FOR XML PATH('organisation'), root ('collection')
SELECT
LTRIM(RTRIM(c1.cptname))+'.' as "orgHeader/orgCode",
LTRIM(RTRIM(c1.cptname))+'.' as "orgHeader/longName",
LTRIM(RTRIM(c1.cptname))+'.' as "orgHeader/shortName",
(
SELECT orgRole from
(
Select 'Coll' AS 'orgRole'
UNION ALL
Select 'Lega' AS 'orgRole'
) a
FOR XML PATH(''), TYPE, ELEMENTS
)
from cpt c1
where cptleagname like '%abc%'
and cptcod IN (select cptcod from pf_map
where pf IN ('abc','abc-jp')
and stat = 'a')
FOR XML PATH('organisation'), root ('collection')
Quando eu executo isso, ele produz 2 arquivos XML como saída como abaixo.
<collection>
<organisation>
<orgHeader>
<orgCode>abc</orgCode>
<longName>abc</longName>
<shortName>abc</shortName>
</orgHeader>
<orgRole>Branch</orgRole>
<externalCodes>
<externalCode>
<system>a</system>
<extCode>abc</extCode>
</externalCode>
<externalCode>
<system>b</system>
<extCode>abc</extCode>
</externalCode>
<externalCode>
<system>Manual</system>
<extCode>abc</extCode>
</externalCode>
</externalCodes>
</organisation>
E
<collection>
<organisation>
<orgHeader>
<orgCode>abc.</orgCode>
<longName>abc.</longName>
<shortName>abc.</shortName>
</orgHeader>
<orgRole>Coll</orgRole>
<orgRole>Leg</orgRole>
</organisation>
</collection>
Embora eu queira adicioná-lo em um único arquivo para produzir resultados como Coleção como raiz e mesclar esses arquivos na marca da organização da seguinte maneira.
<collection>
<organisation>
<orgHeader>
<orgCode>abc</orgCode>
<longName>abc</longName>
<shortName>abc</shortName>
</orgHeader>
<orgRole>Branch</orgRole>
<externalCodes>
<externalCode>
<system>a</system>
<extCode>abc</extCode>
</externalCode>
<externalCode>
<system>b</system>
<extCode>abc</extCode>
</externalCode>
<externalCode>
<system>Manual</system>
<extCode>abc</extCode>
</externalCode>
</externalCodes>
</organisation>
<organisation>
<orgHeader>
<orgCode>abc.</orgCode>
<longName>abc.</longName>
<shortName>abc.</shortName>
</orgHeader>
<orgRole>Coll</orgRole>
<orgRole>Leg</orgRole>
</organisation>
</collection>
Por favor, comente abaixo se qualquer outra informação for necessária. Obrigado.
Algo próximo da saída desejada:
saída para ele:
Você disse que a tag pai
orgRole
deve ser removida. Estamos próximos da solução final, mas ainda não chegamos lá. tenho uma ideia comFOR XML EXPLICIT
a saída para ele:
uma pequena observação:
externalCodes/externalCode
ainda aparece (com null) quando temos valores nulos nas colunas correspondentes.You can use two variables : one to store the first part of the xml and one to store the second part; then add as prefix
<collection>
and a suffix `'output of this:
dbfiddle here
LATER ADDED
to export with bcp:
[test].[dbo].[test_xml]
it is a stored procedure where you will place your code inside.