2017-09-06 7 views
1

挿入用のテーブルを監視し、挿入された値でストアドプロシージャを呼び出したいとします。SQLトリガがパラメータとして挿入された値を持つストアドプロシージャを呼び出す

監視テーブル(BatchDetails)は次の列があります BatchID、BatchStartTime、BatchEndTime

手順

注挿入された最新BatchIDを使用するストアド: 常に挿入のみ一列があります一度に。

私はこのリンクを見てきましたが、いくつかのテーブルがたくさんあるようです。これを行う簡単な方法はありますか?

Call stored proc from after insert trigger

+2

insertは* mutliple * rowsに影響を与える可能性があり、1行に1回ではなく、1命令につき1回トリガします。通常は、格納されたprocを呼び出すのではなく、(少量の)ロジック*をトリガに入れるべきです。ストアドプロシージャ*は何をしますか? –

+0

一度に挿入できる行は1つだけです。挿入される行は複数ありません。 – 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

単列の挿入のみを処理できるトリガーを作成する場合は、通常、その前提条件の*チェック*とそれが満たされていない場合はエラーを投げます。さもなければ、(6ヶ月、1年など)後に誰かを噛むのを待っているバグで、複数行の挿入を開始します。 –

関連する問題