результаты выполнения хранимых процедур без OUTPUT
От: Цыба Украина  
Дата: 01.08.09 00:59
Оценка:
здравствуйте

тема давным-давно уже баян, но как-то гугль подвёл (
помогите, пожалуйста, разобраться с возвратом значений из хранимой процедуры с присвоением таких значений 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?

спасибо
sql stored procedure exec хранимая процедура
Re: результаты выполнения хранимых процедур без OUTPUT
От: ilya.buchkin США http://engineering.meta-comm.com/
Дата: 01.08.09 02:30
Оценка: 2 (1) +1
Здравствуйте, Цыба, Вы писали:

Ц>здравствуйте

Ц>тема давным-давно уже баян, но как-то гугль подвёл
Ц>помогите, пожалуйста, разобраться с возвратом значений из хранимой процедуры с присвоением таких значений t-sql переменным в ms sql 2005

http://www.sommarskog.se/share_data.html — обзор in English, подойдет?

от себя могу добавить, что сам я так и не научился программировать на T-SQL без скорби, так чтоб результат радовал глаз. так что если найдете себя в таком же состоянии — Вы не один.
--
Ilya Buchkin
MetaCommunications Engineering, Iowa City — Санкт-Петербург
Re[2]: в добавку...
От: ilya.buchkin США http://engineering.meta-comm.com/
Дата: 01.08.09 02:40
Оценка: 2 (1)
Здравствуйте, 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
MetaCommunications Engineering, Iowa City — Санкт-Петербург
Re[2]: результаты выполнения хранимых процедур без OUTPUT
От: Цыба Украина  
Дата: 01.08.09 10:47
Оценка:
Здравствуйте, ilya.buchkin, Вы писали:

IB>http://www.sommarskog.se/share_data.html — обзор in English, подойдет?


да, спасибо огромное за статью

IB>от себя могу добавить, что сам я так и не научился программировать на T-SQL без скорби, так чтоб результат радовал глаз. так что если найдете себя в таком же состоянии — Вы не один.


хах, я уже нашёл, когда гуглил )))
Re[3]: в добавку...
От: Цыба Украина  
Дата: 01.08.09 10:55
Оценка:
Здравствуйте, ilya.buchkin, Вы писали:

IB>Ваш конкретный [очевидно, упрощенный] пример можно переписать через UDF/TVF:


да, он был упрощён мной из-за публикации вопроса сюда, чтобы у читателя не возникало проблем с быстрой интерпретацией вопроса
но я его, видимо, слишком упростил, и сейчас объясню почему
пользовательские функции, насколько я помню из своего же опыта (предовставленные вами статьи пока не читал, но после ответа начну), не позволяют то ли insert-ы делать, то ли хитрые select-ы, и ещё много чего не умеют — это точно
мне стоило указать как-то, что я не просто результ калькуляций хочу возвратить, а провести ещё некоторые манипуляции с самой базой данных
но, тем не менее, спасибо большое за предоставленную статью ещё раз
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.