2017-09-06 208 views
1

我想監視插入表並使用插入的值調用存儲過程。使用插入值作爲參數調用存儲過程的SQL觸發器

監控表(BatchDetails)將有以下幾列 BatchID,BatchStartTime,BatchEndTime

存儲過程將使用已經插入了最新BatchID

注: 有將始終只有一行插入一次。

我一直在看這個鏈接,但似乎有很多事情,即幾個表。有沒有一個簡單的方法來做到這一點?

Call stored proc from after insert trigger

+2

刀片可以影響*複式*行,每言每行一次觸發火災,一次也沒有。通常情況下,您應該將(少量)邏輯*放在觸發器中,而不是調用存儲過程。存儲過程*做什麼*? –

+0

一次只能插入一行。插入的行不會超過一行。 – Abe

+2

在我看來,如果你只是花時間去研究它,那麼你鏈接到自己的問題就有了解答你的問題所需的所有信息。 –

回答

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個月,一年等)的錯誤。 –

相關問題