Объявление XML с «FOR XML PATH» в SQL Server 2005 - PullRequest
2 голосов
/ 22 января 2010

Ниже приведена упрощенная версия запроса, который я уже создал. Запрос работает нормально, но я не могу понять, как получить объявление 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>

Заранее благодарю за любую помощь, которую вы можете оказать.

Ответы [ 5 ]

3 голосов
/ 22 января 2010

Это грязно, но вы можете просто соединить его на передней панели ...

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)
2 голосов
/ 22 января 2010

попробуйте это:

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
       (your whole upper select here)
1 голос
/ 09 февраля 2010

Вот что я в итоге сделал. Тип данных не возвращается как тип данных 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')
)
1 голос
/ 09 февраля 2010

К сожалению это то, что я нашел в Электронная документация по SQL Server :

Объявление XML PI в экземпляре не сохраняется, когда экземпляр сохраняется в базе данных. Например:

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))
0 голосов
/ 06 июля 2011

В 2008 R2 от EM, если вы откроете «Сохранить как» и развернете кнопку «Сохранить», то сможете сохранить кодировку ведьмы, после чего объявление xml будет добавлено автоматически.

Надеюсь, это поможет. Привет.

...