我想监视表的插入并使用已插入的值调用存储过程。
受监控的表(BatchDetails)将包含以下列 BatchID,BatchStartTime,BatchEndTime
存储过程将使用已插入的最新BatchID
注意: 一次只能插入一行。
我一直在看这个链接,但似乎有很多事情,即几张桌子。有一种简单的方法吗?
答案 0 :(得分: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 - 您可能希望将插入程序所在的程序调用{{1}}表。也许有一个proc来执行插入操作,并在那里添加对此过程的调用。这将是一个更好的方法来解决这个问题。
希望它有意义
答案 1 :(得分:1)
详细说明上一个答案,并考虑插入多于1行,您可以尝试执行以下操作:
CREATE TRIGGER TR_Monitor_BatchDetails_Inserts
ON BatchDetails
AFTER INSERT
AS
BEGIN
DECLARE @BatchId INT
Declare bcursor cursor local for
SELECT BatchId FROM INSERTED ORDER BY [PK_ColumnHere/Date/OtherOrderingColumn] DESC
open bcursor
fetch next from bcursor into @BatchId
while @@FETCH_STATUS = 0 begin
EXEC SomeStoredProc @BatchId
fetch next from bcursor into @BatchId
end
close bcursor
deallocate bcursor
END