Declaração XML com "para XML Path" no SQL Server 2005
-
22-09-2019 - |
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.
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.