Далее рассмотрим чтение результата запроса.
В первом примере переменная @i получит значение равное 2008.
var @i = 0;
select @i = PYEAR as X from BOOK order by ID;
Выводим значение @i:
select @i as I from BOOK where ID = 1;
Значение переменной присваивается на каждой строке, а в последней строке содержится значение 1996.
Во втором примере в строке @names накапливается значение:
// Функция iif - условное выражение.
// Если первый аргумент не равен нулю, то функция iif
// возвращает второй аргумент, если равен нулю - третий.
var @names = '', @cnt = 0;
select @cnt = count(*) from
(
select
@names = iif(recno == 0, '', @names +
iif(@names != '', ',', '') +
NAME)
from BOOK
);
Выводим значение @names:
select @names as NAMES from BOOK;
В результате @names содержит строку: «Мертвые души, Ревизор, Шинель, Капитанская дочка, Метель, Барышня-крестьянка, Мцыри, Песня про купца Калашникова».
Приведем другой вариант вычисления @names с использованием хранимой процедуры. Создаем процедуру:
// Если процедура scBNames существует
// раскомментируйте:
// drop procedure scBNames;
create procedure scBNames(nBook, names inout) as
declare variable @name1 = '';
begin
select
@name1 = NAME
from
BOOK
where
ID = @nBook;
@names = @names + @name1;
return @names;
end;
Вычисляем значение @names путем вызова процедуры на каждой строке результирующего запроса:
var @names = '';
select scBNames(ID, @names) from BOOK;
В результате @names содержит строку: «МертвыедушиРевизорШинельКапитанская дочкаМетельБарышня-крестьянкаМцыриПесня про купца Калашникова».