使用插入值作为参数调用存储过程的SQL触发器

使用插入值作为参数调用存储过程的SQL触发器

问题描述:

我想监视插入表并使用插入的值调用存储过程。使用插入值作为参数调用存储过程的SQL触发器

监控表(BatchDetails)将有以下几列 BatchID,BatchStartTime,BatchEndTime

存储过程将使用已经插入了最新BatchID

注: 有将始终只有一行插入一次。

我一直在看这个链接,但似乎有很多事情,即几个表。有没有一个简单的方法来做到这一点?

Call stored proc from after insert trigger

+2

刀片可以影响*复式*行,每言每行一次触发火灾,一次也没有。通常情况下,您应该将(少量)逻辑*放在触发器中,而不是调用存储过程。存储过程*做什么*? –

+0

一次只能插入一行。插入的行不会超过一行。 – Abe

+2

在我看来,如果你只是花时间去研究它,那么你链接到自己的问题就有了解答你的问题所需的所有信息。 –

您可以通过用户这样的触发器:

CREATE TRIGGER TR_Monitor_BatchDetails_Inserts 
    ON BatchDetails 
AFTER INSERT 
AS 
BEGIN 
    DECLARE @BatchId INT 
    SELECT TOP 1 @BatchId = BatchId 
    FROM INSERTED 
    ORDER BY [PK_ColumnHere/Date/OtherOrderingColumn] DESC 

    EXEC SomeStoredProc @BatchId 
END 

但它存在一些缺陷:

1 - 中INSERTED(行可以有更多的行这是不会处理所有这些

2 - 你可能想要请将您的程序从插入的位置调入BatchDetails表格。也许有一个proc做插入,并在那里添加对你的程序的调用。这将是解决这个问题的更好方法。

希望这是有道理的

+6

如果你要写一个只能处理单行插入的触发器,我通常会坚持认为它包含* check *的前提条件,如果不符合,则抛出一个错误。否则,它会在稍后开始执行多行插入操作时等待咬人(6个月,一年等)的错误。 –