2

以下は、私が既に作成したクエリの簡易バージョンです。クエリは正常に動作しますが、生成された 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

5 に答える 5

3

面倒ですが、前に連結することもできます...

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)
于 2010-01-22T00:04:21.703 に答える
2

これを試して:

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
       (your whole upper select here)
于 2010-01-22T00:05:45.543 に答える
1

残念ながら、これはSQL Server Books Onlineで見つけたものです。

インスタンス内の 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))
于 2010-02-09T04:14:05.220 に答える
1

これが私がやったことです。データ型は 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')
)
于 2010-02-09T17:12:02.457 に答える
0

EMの2008R2では、[名前を付けて保存]を開いて[保存]ボタンを展開すると、魔女のエンコーディングを保存できます。その後、xml宣言が自動的に追加されます。

それが役に立てば幸い。よろしく。

于 2011-07-06T14:24:16.260 に答える