здравствуйте
тема давным-давно уже баян, но как-то гугль подвёл (
помогите, пожалуйста, разобраться с возвратом значений из хранимой процедуры с присвоением таких значений t-sql переменным в ms sql 2005
знаю, есть возможность использовать output-параметры, но они, на мой взгляд, выглядят довольно неуклюже
пока нашёл только следующий способ:
create procedure math
@a as int,
@b as int
as begin
select @a + @b as "plus", @a - @b as "minus";
end;
declare @result table(plus int, minus int);
insert into @result exec math 4, 6;
declare @_plus as int;
declare @_minus as int;
set @_plus = (select plus from @result); -- set - именно цель всего этого
set @_minus = (select minus from @result);
print @_plus;
print @_minus;
укажите, пожалуйста, что я делаю не так (я пока вижу только излишек кода + большее количество операций вместо простейшего set @output = value в самой процедуре), и есть ли альтернативные варианты возвращения одного и нескольких значений из хранимой процедуры так, чтобы присваивать их t-sql переменным без использования output?
и вдогонку: существуют ли способы не указывать структуру возвращаемого набора данных, т.е. как бы что-то типа declare @result as table?
спасибо
Здравствуйте, Цыба, Вы писали:
Ц>здравствуйте
Ц>тема давным-давно уже баян, но как-то гугль подвёл
Ц>помогите, пожалуйста, разобраться с возвратом значений из хранимой процедуры с присвоением таких значений t-sql переменным в ms sql 2005
http://www.sommarskog.se/share_data.html — обзор in English, подойдет?
от себя могу добавить, что сам я так и не научился программировать на T-SQL без скорби, так чтоб результат радовал глаз. так что если найдете себя в таком же состоянии — Вы не один.
Здравствуйте, ilya.buchkin, Вы писали:
IB>Здравствуйте, Цыба, Вы писали:
Ц>>помогите, пожалуйста, разобраться с возвратом значений из хранимой процедуры с присвоением таких значений t-sql переменным в ms sql 2005
Ваш конкретный [очевидно, упрощенный] пример можно переписать через UDF/TVF:
create function fmath ( @a as int, @b as int ) returns table
as
return select @a + @b as [plus], @a - @b as [minus];
go
declare @_plus as int;
declare @_minus as int;
select @_plus = plus, @_minus = minus from dbo.fmath( 4, 6 ) ---------- "set" -> "select"
print @_plus;
print @_minus;
но на практике это метод легко может упереться в ограничения этих самых UDF/TVF (в
том же обзоре про это есть)
Здравствуйте, ilya.buchkin, Вы писали:
IB>http://www.sommarskog.se/share_data.html — обзор in English, подойдет?
да, спасибо огромное за статью
IB>от себя могу добавить, что сам я так и не научился программировать на T-SQL без скорби, так чтоб результат радовал глаз. так что если найдете себя в таком же состоянии — Вы не один.
хах, я уже нашёл, когда гуглил )))