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 联机丛书中找到的:

当实例存储在数据库中时,不会保留实例中的 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的2008 R2中,如果打开“另存为”并展开“保存”按钮,则可以保存巫婆编码,然后自动添加xml声明。

希望能帮助到你。问候。

于 2011-07-06T14:24:16.260 回答