【发布时间】:2019-10-11 05:17:51
【问题描述】:
我正在写一个INSTEAD OF INSERT触发器来截取插入的数据并填写column2。
我需要执行一个存储过程,该过程返回要插入 column2 的值。
存储过程每次执行都会返回不同的值(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
【问题讨论】:
-
所以...这个存储过程在每次执行时都会生成一个值,对吗?如果是这样,您可能应该寻找一种更改它的方法,以便它生成多个值并将它们作为表返回。顺便说一句,AFAIK,插入的伪表是只读的。
标签: sql sql-server loops tsql sql-server-2017