|
Sybase
|
|
|
|
|
Продукты
|
|
|
|
|
Сообщества
|
|
|
|
|
Меню
|
|
|
|
|
Вход
|
|
|
|
|
Рассылка
|
|
|
|
|
Статистика
|
|
|
|
|
Как собрать в одну строку значения из 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 . Все права защищены.
|