2015-04-21 5 views
1

У меня есть одна таблица столбцов в SQL Server.SQL Server Заполняет переменную XML из строк VARCHAR

Этот столбец содержит каждую строку 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) лимит.

+0

'' недопустимый XML. –

+0

Вам потребуется хотя бы второй столбец для заказа таблицы. Если вы не укажете порядок, команды выбора будут возвращать строки, упорядоченные случайным образом. –

+4

Вы ** превышаете ** ограничение 2 ГБ (2 *** миллиарда *** символов)? ДЕЙСТВИТЕЛЬНО?!?!? Это примерно ** 200 раз ** весь текст «Войны и мира» Льва Толстого * - очень толстая книга для начала ... –

ответ

0

В общем, самый простой способ объединить значения в переменной

declare @res nvarchar(max) 

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

select cast(@res as xml) 

Конечно, порядок конкатенации в этом запросе не определен (но есть trick, чтобы проверить, если порядок поддерживается)

0

Я удивлен тем, что превысил лимит в столбцах nvarchar(max), так как у вас есть Marc, но, возможно, у вас установлены ограничения по столбцу в настройках базы данных, которые вы не можете изменить. Вот как я это сделаю, и я предполагаю, что есть столбец, который позволяет вам заказывать теги в соответствующем порядке, вы не можете полагаться на порядок, в котором база данных решила хранить и извлекать строки.

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) 
+0

Разве это все равно не подступит к потоку nvarchar (max) при нажатии в .value()? OP говорит: «при конкатенации все данные в таблице превышают предел nvarchar (max)» –

+0

@NathanSkerl. Мое предположение состоит в том, что ограничения столбцов OP более ограничены, чем переменные 'nvarchar (max). Если это действительно ограничение 2 ГБ, то я не знаю, как им помочь, ответ Романа Пекара столкнулся с той же проблемой, потому что его '@ res' также является' nvarchar (max) ' – funkwurm

 Смежные вопросы

  • Нет связанных вопросов^_^