我想監視插入表並使用插入的值調用存儲過程。使用插入值作爲參數調用存儲過程的SQL觸發器
監控表(BatchDetails)將有以下幾列 BatchID,BatchStartTime,BatchEndTime
存儲過程將使用已經插入了最新BatchID
注: 有將始終只有一行插入一次。
我一直在看這個鏈接,但似乎有很多事情,即幾個表。有沒有一個簡單的方法來做到這一點?
Call stored proc from after insert trigger
我想監視插入表並使用插入的值調用存儲過程。使用插入值作爲參數調用存儲過程的SQL觸發器
監控表(BatchDetails)將有以下幾列 BatchID,BatchStartTime,BatchEndTime
存儲過程將使用已經插入了最新BatchID
注: 有將始終只有一行插入一次。
我一直在看這個鏈接,但似乎有很多事情,即幾個表。有沒有一個簡單的方法來做到這一點?
Call stored proc from after insert trigger
您可以通過用戶這樣的觸發器:
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做插入,並在那裏添加對你的程序的調用。這將是解決這個問題的更好方法。
希望這是有道理的
如果你要寫一個只能處理單行插入的觸發器,我通常會堅持認爲它包含* check *的前提條件,如果不符合,則拋出一個錯誤。否則,它會在稍後開始執行多行插入操作時等待咬人(6個月,一年等)的錯誤。 –
刀片可以影響*複式*行,每言每行一次觸發火災,一次也沒有。通常情況下,您應該將(少量)邏輯*放在觸發器中,而不是調用存儲過程。存儲過程*做什麼*? –
一次只能插入一行。插入的行不會超過一行。 – Abe
在我看來,如果你只是花時間去研究它,那麼你鏈接到自己的問題就有了解答你的問題所需的所有信息。 –