Pergunta

Abaixo está uma versão simplificada de uma consulta que eu já criei. A consulta funciona bem, mas não consigo descobrir como obter a declaração XML na parte superior do XML gerado. Eu tentei várias coisas e procurei em toda parte no Google, mas, infelizmente, não consigo descobrir como fazer isso ... ou mesmo se é possível.

select 
    'Dimension' "@type",
    (
        select
            (
                select
                    'X102' "TransactionType",
                    convert(varchar, getdate(), 104) "Transfer/TransferDate",
                    convert(varchar, getdate(), 108) "Transfer/TransferTime"
                for xml path (''), type
            ) "TransactionInformation"
        for xml path (''), type
    )
for xml path ('DimensionImport'), type

Me dá ...

<DimensionImport type="Dimension">
    <TransactionInformation>
        <TransactionType>X102</TransactionType>
        <Transfer>
            <TransferDate>21.01.2010</TransferDate>
            <TransferTime>15:46:36</TransferTime>
        </Transfer>
    </TransactionInformation>
</DimensionImport>

Estou querendo ...

<?xml version="1.0" encoding="ISO-8859-1" ?>
<DimensionImport type="Dimension">
    <TransactionInformation>
        <TransactionType>X102</TransactionType>
        <Transfer>
            <TransferDate>21.01.2010</TransferDate>
            <TransferTime>15:46:36</TransferTime>
        </Transfer>
    </TransactionInformation>
</DimensionImport>

Agradeço antecipadamente por qualquer ajuda que você possa emprestar.

Foi útil?

Solução 4

Aqui está o que eu acabei fazendo. O tipo de dados não é retornado como um tipo de dados XML, mas eu posso lidar com isso, eu acho.

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' +
(
    select 
        'Dimension' "@type",
        (
            select
                (
                    select
                        'X102' "TransactionType",
                        convert(varchar, getdate(), 104) "Transfer/TransferDate",
                        convert(varchar, getdate(), 108) "Transfer/TransferTime"
                    for xml path (''), type
                )
            for xml path ('TransactionInformation'), type
        ),
        (
            ... queried up data here ...
        )
    for xml path ('DimensionImport')
)

Outras dicas

É bagunçado, mas você pode concatená -lo na frente ...

SELECT '<? xml...>' + 
(select 
    'Dimension' "@type",
    (
        select
            (
                select
                    'X102' "TransactionType",
                    convert(varchar, getdate(), 104) "Transfer/TransferDate",
                    convert(varchar, getdate(), 108) "Transfer/TransferTime"
                for xml path (''), type
            ) "TransactionInformation"
        for xml path (''), type
    )
for xml path ('DimensionImport'), type)

Experimente isso:

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
       (your whole upper select here)

Infelizmente foi isso que encontrei em Livros do SQL Server online:

A declaração XML PI em uma instância não é preservada quando a instância é armazenada no banco de dados. Por exemplo:

Copy Code CREATE TABLE T1 (Col1 int primary key, Col2 xml)
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')
GO
SELECT Col2
FROM T1

O resultado é <doc/>.

A única solução alternativa é retornar o XML como um tipo Varchar (max):

select '<?xml version="1.0" encoding="ISO-8859-1" ?>'
+
cast( (
select 
    'Dimension' "@type",
    (
        select
            (
                select
                    'X102' "TransactionType",
                    convert(varchar, getdate(), 104) "Transfer/TransferDate",
                    convert(varchar, getdate(), 108) "Transfer/TransferTime"
                for xml path (''), type
            ) "TransactionInformation"
        for xml path (''), type
    )
for xml path ('DimensionImport'), type) as varchar(max))

Em 2008, o R2 a partir de EM, se você abrir o botão "Salvar como" e expandir "salvar", poderá salvar a codificação de bruxas, depois disso, a declaração XML é adicionada automaticamente.

Espero que ajude. Cumprimentos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top