Декларация XML с «для XML Path» в SQL Server 2005
-
22-09-2019 - |
Вопрос
Ниже приведена упрощенная версия запроса, которую я уже создал. Запрос работает нормально, но я не могу понять, как получить объявление XML в верхней части сгенерированного XML. Я пробовал несколько вещей и искал повсюду в Google, но, увы, я не могу узнать, как это сделать ... или даже если это возможно.
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
Дает мне...
<DimensionImport type="Dimension">
<TransactionInformation>
<TransactionType>X102</TransactionType>
<Transfer>
<TransferDate>21.01.2010</TransferDate>
<TransferTime>15:46:36</TransferTime>
</Transfer>
</TransactionInformation>
</DimensionImport>
Я хочу ...
<?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>
Заранее спасибо за любую помощь, которую вы сможете одолжить.
Решение 4
Вот что я закончил. Тип данных не возвращается как DataType XML, но я могу справиться с этим, я думаю.
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')
)
Другие советы
Это грязно, но вы можете просто объединить его спереди ...
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)
попробуй это:
select '<?xml version="1.0" encoding="ISO-8859-1" ?>' +
(your whole upper select here)
К сожалению, это то, что я нашел в SQL Server Books Online:
Declaration PI XML в экземпляре не сохраняется, когда экземпляр хранится в базе данных. Например:
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
Результат <doc/>
.
Единственный обходной путь - вернуть XML как тип 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))
В 2008 году R2 от EM, если вы откроете кнопку «Сохранить как» и развернуть «Сохранить», то вы можете сохранить кодирование ведьмы, после этого объявление XML добавляется автоматически.
Надеюсь, поможет. С Уважением.