Форум FAQ О команде
Поиск по сайту:
 
Sybase
Sybase ASA  
Sybase ASE  
Sybase IQ  
Sybase PowerDesigner  
Sybase PowerBuilder  

Продукты
Наши продукты  
Продукты партнеров портала  

Сообщества
Alef community  

Меню
Регистрация  
Почта  

Вход

Рассылка
Рассылка 'РСУБД Sybase ASA 9 - мощность, легкость и надежность'
Почтовая рассылка
"Технологии обработки данных компании Sybase"


Статистика
Яндекс цитирования

Rambler's Top100
Находится в каталоге Апорт

Главная -> Статьи
Как собрать в одну строку значения из N записей

Как собрать в одну строку значения из N записей

Все пользователи Sybase с давних пор пользовались следующим приемом :
declare @v varchar(255) 
select @v = '' 
select @v=@v+name+' ' 
from sysobjects
-- здесь даже может быть order by

select @v
И хотя такое поведение нигде не было описано, код всегда работал.
Но с версии 12.5 это работать перестало. Как оказалось, такое поведение было расценено разработчиками как баг, и он был "исправлен" - в 12.5 и выше в переменную попадает только значение одной строки.

Но с оператором UPDATE это все еще работает:
declare @v varchar(2048) 
select @v = '' 
update sysobjects 
  set @v = @v + '' + name 
from sysobjects 
select @v
go

Но вот ORDER BY уже использовать нельзя.

При использовании этого приема помните, что
1) Длина строки для переменной конечна.
2) Несмотря п. 1 ASE будет орабатывать ВСЕ записи, которые удовлетворяют условию WHERE. Поэтому позаботьтесь о том, чтобы их было не больше, чем вам нужно. Иначе ASE будет впустую читать лишние данные.
3) Это недокументированное поведение, поэтому код, использующий этот прием должен тщательно тестироваться.

При подготовке статьи использовались частично материалы
ISUG ASE FAQ
и приемы, изложенные в книге
Tips, Tricks & Recipes for Sybase ASE


Дата публикации: Wednesday 29 March 2006 12:53:42
Материал прочитан: 11965 раз(а)
[ Назад ]



Продвижение сайтов
Биржа ссылок

Copyright©2005 phpMS. Все права защищены.
hosted on pets-tree