2017-02-14 10 views
0

テーブルの更新にトリガーを使用しています。SQL Serverは複数の更新行をトリガーします

1行を更新していたときに動作します。しかし、一度に20行を更新すると、ログには1つの履歴更新が表示されます。

すべての更新された行を表示する必要があります。それを作る方法?

この私の単純なSQL:あなたはセットベースのファッションでトリガーを書いて、inserteddeleted複数行含まれていることを認識する必要があり

create trigger Triger_Update_Product 
on product 
for update 
as begin 
    declare @first char(10) 
    declare @after char(10) 

    select @first = name from deleted 

    select @after = name from inserted 

    insert into historyproduk 
     select @first, @after, getdate() 
end 
+0

https://msdn.microsoft.com/en-in/library/ms190752.aspx –

答えて

0

- ので、これらのコード行ですが本当に悪い:

select @first = name from deleted 
select @after = name from inserted 

は、これらはセキュリティ更新プログラムセットから1任意の行を選択 - 他のすべての行は無視されます。 しないでください!

は、代わりにこれを試してみてください:

create trigger Trigger_Update_Product 
on product 
for update 
as begin 
    insert into historyproduk 
     select d.name, i.name, getdate() 
     from deleted d 
     inner join inserted i on d.PrimaryKey = i.PrimaryKey 
end 

をあなたがに必要な主キーにInsertedDeleted擬似テーブルを結合し、古い(deleted)及び(Inserted)新しく挿入からNameをつかみます日付/時刻スタンプとともに履歴テーブルに単一のINSERT ... SELECT ....ステートメントで処理するステートメント複数の行が更新されている

関連する問題