2015-04-20 4 views
0

У меня есть хранимая процедура, которая возвращает пару выходных параметров - идентификатор и вычисленное значение. Можно ли использовать триггер с оператором insert, который вставляет эти два значения напрямую? Что-то вроде этогоВвод параметров вывода из хранимой процедуры напрямую

CREATE TRIGGER Trig_FirstTable ON SecondTable AFTER UPDATE 
AS 
BEGIN 
INSERT INTO FirstTable (OtherID, OtherValue) 
VALUES (@otherID, @otherValue) 
FROM StoredProcedure inserted.ID, inserted.Value, @otherID OUTPUT, @otherValue OUTPUT 
END 
+0

хранит ли процедура обновления тех же данных в 'SecondTable'? – ughai

+2

Насколько мне известно, не так, как вы его написали. Вы можете выполнить хранимую процедуру и использовать выходные переменные, чтобы делать все, что хотите в триггере, но вы не можете использовать хранимую процедуру в предложении FROM. –

+0

вам придется перебирать записи в 'вставленные', затем вызывать свою процедуру, а затем вставлять в' FirstTable' – ughai

ответ

1

Согласно MSDN documentation вы можете использовать INSERT в с EXEC. Они дают следующий пример:

--INSERT...EXECUTE procedure example 
INSERT author_sales EXECUTE get_author_sales 

Но я думаю, что хранимая процедура нуждается в ЗЕЬЕСТЕ вернуть данные вместо только заполнения выходных параметров.

0

Вы можете вставить из СП так:

drop procedure uspTest 
GO 
create procedure uspTest 
AS 
select 1 as id, 'x' as val 
union all 
select 2,'y' 
GO 

drop table #temp 
GO 
create table #temp (
    id int, 
    val char(1) 
) 
GO 

insert into #temp (id,val) 
EXECUTE uspTest 
GO 

select 
    * 
from #temp 

Но вы не можете выбрать подмножество столбцов, поэтому этот метод, очевидно, не в состоянии, если вы добавите больше выходов к вашему SP в будущем:

insert into #temp (id) 
EXECUTE uspTest 

Другой способ - сохранить результаты SP в переменных, а затем использовать их для вставки.

Смежные вопросы