Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 склеивание строк оптимальное  [new]
Albatross
Member

Откуда:
Сообщений: 1001
Есть таблица нужно склеить строки в текстовом виде.
Сейчас используется нечто вроде


DECLARE @print_message VARCHAR(MAX)	
set @print_message = ''
SELECT @print_message = @print_message  + message + ' - ' 
FROM dbo.MESSAGES
WHERE ...


Проблема в том, что если текст получается достаточно большим, время выполнения конструкции становится почти бесконечным, т.к. тут квадратичная зависимость, похоже.

А как сделать лучше? Чтобы линейная была зависимость. Я понимаю что задача не SQL-ная.
Кроме как через CLR-ф-ции, никак?
17 фев 12, 14:40    [12110272]     Ответить | Цитировать Сообщить модератору
 Re: склеивание строк оптимальное  [new]
iljy
Member

Откуда:
Сообщений: 8711
Albatross,

использовать FOR XML.
17 фев 12, 14:41    [12110285]     Ответить | Цитировать Сообщить модератору
 Re: склеивание строк оптимальное  [new]
Albatross
Member

Откуда:
Сообщений: 1001
iljy
Albatross,

использовать FOR XML.

А можно подробнее?
Получил например я XML вида....

<root>
  <p message="1" />
  <p message="2" />
  <p message="3" />
  <p message="4" />
</root>


Пусть результат сидит в переменнной @xml
как теперь получить склейку? Т.е. например текст 1234
17 фев 12, 15:11    [12110590]     Ответить | Цитировать Сообщить модератору
 Re: склеивание строк оптимальное  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Albatross, faq - сложение символьных полей для sql 2005
17 фев 12, 15:13    [12110620]     Ответить | Цитировать Сообщить модератору
 Re: склеивание строк оптимальное  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Albatross,
declare @str varchar(max)
select  @str = ( select message + ';'
                 from   dbo.MESSAGES
for     xml path('')  , type).value('text()[1]', 'varchar(max)')

select  @str
17 фев 12, 17:01    [12111746]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить