Я пишу триггер INSTEAD OF INSERT
для перехвата вставленных данных и заполнения столбца 2.
Мне нужно выполнить хранимую процедуру, которая возвращает значение для вставки в столбец 2.
Хранимая процедуравозвращает новое значение каждый раз, когда оно выполняется (crypto prng).
Поэтому, если кто-то вставляет 10 строк, мой триггер должен выполнить хранимую процедуру 10 раз и заполнить каждую строку одним из возвращенных значений.
Я слышал, что для чего-то подобного редко нужно использовать курсоры.
Но я не уверен, что стандартный цикл также является лучшим подходом.
Есть ли более обтекаемыйспособ достижения этого в операторе SELECT
, UPDATE
или INSERT
?
CREATE TRIGGER dbo.table1_instead_of_insert
ON dbo.table1
INSTEAD OF INSERT
AS BEGIN
DECLARE @i BIGINT ;
EXECUTE dbo.proc1 @1 ;
--proc1 sets the value of @i to a different value each time proc1 is executed
--(crypto prng)
--Update the value of column2 in INSERTED, setting it to the value of @i
--Repeat this process for each row in INSERTED,
--with proc1 returning a different value for each row
INSERT INTO dbo.table1 ( column1 , column2 )
SELECT column1 , column2 FROM INSERTED ;
END
GO