代码之家  ›  专栏  ›  技术社区  ›  Davin Studer

SQL Server 2005中带有“for xml path”的XML声明

  •  2
  • Davin Studer  · 技术社区  · 14 年前

    下面是我已经创建的查询的简化版本。查询工作正常,但我无法确定如何在生成的XML顶部获取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
    

    给我…

    <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 回复  |  直到 13 年前
        1
  •  3
  •   Rob Farley    14 年前

    很混乱,但你可以把它连接在前面…

    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
  •  2
  •   Mladen Prajdic    14 年前

    试试这个:

    select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
           (your whole upper select here)
    
        3
  •  1
  •   Jose Chama    14 年前

    不幸的是,这是我在 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/> .

    唯一的解决方法是以varchar(max)类型返回XML:

    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))
    
        4
  •  1
  •   Davin Studer    14 年前

    这就是我最后所做的。数据类型不是作为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')
    )
    
        5
  •  0
  •   fiorebat    13 年前

    在2008年从em开始的r2中,如果您打开“另存为”并展开“保存”按钮,则可以保存witch编码,然后自动添加xml声明。

    希望有帮助。 当做。

    推荐文章