Moi*_*ala 15 xml sql-server concatenation sql-server-2008
我在SQL SERVER数据库中的各种表中生成了以下XML
<XMLData>
...
<Type>1</Type>
...
</XMLData>
Run Code Online (Sandbox Code Playgroud)
和
<XMLData>
...
<Type>2</Type>
...
</XMLData>
Run Code Online (Sandbox Code Playgroud)
和
<XMLData>
...
<Type>3</Type>
...
</XMLData>
Run Code Online (Sandbox Code Playgroud)
我需要的最终输出是单个组合如下:
<AllMyData>
<XMLData>
...
<Type>1</Type>
...
</XMLData>
<XMLData>
...
<Type>2</Type>
...
</XMLData>
<XMLData>
...
<Type>3</Type>
...
</XMLData>
<AllMyData>
Run Code Online (Sandbox Code Playgroud)
注 - 我合并的所有独立元素都具有相同的标记名称.
提前感谢您查看此内容.
Mik*_*son 17
我在SQL SERVER数据库中的各种表中生成了以下XML
取决于你如何拥有它,但如果它在XML变量中,你可以这样做.
declare @XML1 xml
declare @XML2 xml
declare @XML3 xml
set @XML1 = '<XMLData><Type>1</Type></XMLData>'
set @XML2 = '<XMLData><Type>2</Type></XMLData>'
set @XML3 = '<XMLData><Type>3</Type></XMLData>'
select @XML1, @XML2, @XML3
for xml path('AllMyData')
Run Code Online (Sandbox Code Playgroud)
我不能发表评论但可以回答,即使我认为评论更合适,我会扩展上面的rainabba回答以增加更多控制.我的.Net代码需要知道返回的列名,所以我不能依赖自动生成的名称,但需要上面提供的非常尖端的rainabba.
这样,xml可以有效地连接成一行,并将结果列命名为.您可以使用相同的方法将结果分配给XML变量,并从PROC返回该变量.
SELECT (
SELECT XmlData as [*]
FROM
(
SELECT
xmlResult AS [*]
FROM
@XmlRes
WHERE
xmlResult IS NOT NULL
FOR XML PATH(''), TYPE
) as DATA(XmlData)
FOR XML PATH('')
) as [someColumnName]
Run Code Online (Sandbox Code Playgroud)
如果使用for xml type,则可以组合XML列而不进行转换.例如:
select *
from (
select (
select 1 as Type
for xml path(''), type
)
union all
select (
select 2 as Type
for xml path(''), type
)
union all
select (
select 3 as Type
for xml path(''), type
)
) as Data(XmlData)
for xml path(''), root('AllMyData'), type
Run Code Online (Sandbox Code Playgroud)
这打印:
<AllMyData>
<XmlData>
<Type>1</Type>
</XmlData>
<XmlData>
<Type>2</Type>
</XmlData>
<XmlData>
<Type>3</Type>
</XmlData>
</AllMyData>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21878 次 |
| 最近记录: |