SQL Server从VARCHAR行填充XML变量

时间:2015-04-21 20:23:16

标签: sql sql-server xml sqlxml

我在SQL Server中有一个列表。

此列包含XML文档的每一行。

样本表:

         Column
---------------
Row1:    <ROOT>
Row2:    <Name>name1</Name>
Row3:    </ROOT>

列数据类型为nvarchar(max)

我想这样做:

DECLARE @RES_XML XML

SET @XML = Set from table above

如何总结上表中的所有行并填充@RES_XML

连接时

注意:;表格中的所有数据均超过nvarchar(max)限制。

2 个答案:

答案 0 :(得分:0)

通常,将值连接到变量的最简单方法是

declare @res nvarchar(max)

select @res = isnull(@res, '') + [Column]
from <table above>

select cast(@res as xml)

当然,未定义此查询中的连接顺序(但有一个trick来检查订单是否已维护)

答案 1 :(得分:0)

我对你超过Marc的nvarchar(max)列的限制感到惊讶,但是你可能在数据库设置中有列限制设置,你无法改变。这是我将如何做到这一点,我假设有一些列让你按照适当的顺序订购标签,你不能依赖于数据库决定存储和检索标签的顺序行。

declare @t table (
    id int,
    x nvarchar(max)
)

insert into @t
select 1, '<ROOT>' union all
select 2, '<Name>name1</Name>' union all
select 3, '</ROOT>'

DECLARE @RES_XML XML

select @RES_XML = cast((
        select x
        from @t
        order by id
        for xml path(''), type
    ).value('.', 'nvarchar(max)') as xml)