更新触发后的MSSQL:多行存储的Prc

时间:2016-08-24 06:16:21

标签: sql-server stored-procedures triggers

我编写了一个存储过程,我想在行更新时调用它。

看起来像这样:

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不是在这种触发器中使用光标的好方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

有两种选择:

1)在while循环中处理数据 - 从插入表中获取数据,并执行SP X次 - 每行一次。

2)重写SP(或创建一个新的),接受表作为输入参数。如果可能的话,一次处理所有行。取决于SP的代码。因此,在触发器中,您执行该SP并传递一些基于插入表的预定义表

请参见https://msdn.microsoft.com/en-AU/library/bb510489.aspx示例。