从各种XML列连接XML而无需将类型转换为字符串

时间:2012-07-17 06:33:20

标签: sql sql-server xml concatenation for-xml-path

我的SQL表中有三个XML列(单行表只用于存储XML),XML结构是这样的:

在第1栏 -

<Column1XML>
    ....
</Column1XML>

在第2栏 -

<Column2XML>
    ....
</Column2XML>

在第3栏 -

<Column3XML>
    ....
</Column3XML>

我正在寻找的最终结果XML是:

<SomeTagName>
    <Column1XML>
        ....
    </Column1XML>
    <Column2XML>
        ....
    </Column2XML>
    <Column3XML>
        ....
    </Column3XML>
</SomeTagName>

如何在不进行字符串连接的情况下获得此必需结构?我确信必须有一种使用Typed XML的方法。

提前感谢您查询我的问题。

1 个答案:

答案 0 :(得分:2)

以下是两种方式。

示例数据

declare @T table
(
  Col1 xml,
  Col2 xml,
  Col3 xml
)

insert into @T values
(
'<Column1XML></Column1XML>',
'<Column2XML></Column2XML>',
'<Column3XML></Column3XML>'
)

使用根名称作为列别名

select Col1 as 'SomeTagName',
       Col2 as 'SomeTagName',
       Col3 as 'SomeTagName' 
from @T
for xml path('')

使用*作为列别名并指定path()

select Col1 as '*',
       Col2 as '*',
       Col3 as '*' 
from @T
for xml path('SomeTagName')

结果:

<SomeTagName>
  <Column1XML />
  <Column2XML />
  <Column3XML />
</SomeTagName>