2016-08-24 11 views
0

私は行の更新で呼び出すストアドプロシージャを記述しました。MSSQL更新後のトリガー:複数行が格納されたPrc

それはこのようなものになります:

Create PROCEDURE [TraceChange] 
    @Id uniqueidentifier, 
AS 
BEGIN 
    /*do some inserts, updates, etc*/ 
END 

を今私は、単一の行の更新のために正常に動作表、のためのトリガーを作成します。

Create TRIGGER T1_TraceInsert 
    on T1 
    AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    declare @id uniqueidentifier 
    exec TraceChange @id 
END 

これは正常に動作します - ちょうどのための単一の行 複数行更新で実行するには、どのように書き換えますか? AFAIKはそのようなトリガー内でカーソルを使用する大きなアプローチではありません。

ありがとうございます!

+0

理想的には、ストアドプロシージャをインライン化し、行ベースではなくセットベースに書き直します。しかし、そのような変革は実行可能ですか?ストアドプロシージャが実際に何をしているのかを知らなくても、ここに伝えることはできません。 –

答えて

0

二つのオプションがある:

1)whileループ内のデータプロセス - 挿入テーブルからデータを取得し、自分のSPのX回実行 - 行ごとに1つ。

2)入力パラメータとしてtableを受け入れるSPを書き直す(または新しいものを作成する)。可能であれば、すべての行を一度に処理します。 SPのコードによって異なります。したがって、トリガでは、そのSPを実行し、に基づいてある事前定義されたテーブルを渡します。テーブル

https://msdn.microsoft.com/en-AU/library/bb510489.aspxを参照してください。

+0

テーブルパラメータはここに行く方法です。ありがとう。 – Jaster

関連する問題