Frage

Unten finden Sie eine vereinfachte Version einer Abfrage, die ich bereits erstellt habe. Die Abfrage funktioniert einwandfrei, aber ich kann nicht herausfinden, wie die XML -Erklärung oben auf dem erzeugten XML erhältlich ist. Ich habe mehrere Dinge ausprobiert und auf dem Google weit und breit gesucht, aber leider kann ich nicht herausfinden, wie das geht ... oder auch wenn es möglich ist.

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

Gibt mir...

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

Ich will ...

<?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>

Vielen Dank im Voraus für jede Hilfe, die Sie möglicherweise verleihen können.

War es hilfreich?

Lösung 4

Hier ist, was ich am Ende getan habe. Der Datentyp wird nicht als XML -Datentyp zurückgegeben, aber ich kann damit umgehen, denke ich.

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')
)

Andere Tipps

Es ist chaotisch, aber Sie könnten es einfach auf der Vorderseite verkettet ...

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)

Versuche dies:

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

Leider habe ich das gefunden, in dem ich gefunden habe SQL Server -Bücher online:

Die XML -Deklaration PI wird in einer Instanz nicht erhalten, wenn die Instanz in der Datenbank gespeichert ist. Zum Beispiel:

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

Das Ergebnis ist <doc/>.

Die einzige Problemumgehung besteht darin, den XML als Varchar (max) zurückzugeben:

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))

Wenn Sie 2008 R2 von EM von EM "speichern" und "und" speichern "-Taste öffnen, können Sie die Hexencodierung speichern. Danach wird die XML -Deklaration automatisch hinzugefügt.

Ich hoffe es hilft. Grüße.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top