我编写了一个存储过程,我想在行更新时调用它。
看起来像这样:
Create PROCEDURE [TraceChange]
@Id uniqueidentifier,
AS
BEGIN
/*do some inserts, updates, etc*/
END
现在我为Table创建一个触发器,它适用于单行更新:
Create TRIGGER T1_TraceInsert
on T1
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @id uniqueidentifier
exec TraceChange @id
END
这很好 - 但只适用于单行。 如何重写它以执行多行更新? AFAIK不是在这种触发器中使用光标的好方法。
谢谢!
答案 0 :(得分:0)
有两种选择:
1)在while循环中处理数据 - 从插入表中获取数据,并执行SP X次 - 每行一次。
2)重写SP(或创建一个新的),接受表作为输入参数。如果可能的话,一次处理所有行。取决于SP的代码。因此,在触发器中,您执行该SP并传递一些基于插入表的预定义表
请参见https://msdn.microsoft.com/en-AU/library/bb510489.aspx示例。