Sql Server触発器の使用

1895 ワード

Sql Serverは各フリップフロップのために二つの専用表を作成しました。Inserted表とDeleted表です。この二つのテーブルはシステムによって維持されています。それらはデータベースではなくメモリに存在します。この二つの表の構造は常にこのトリガーによって作用されるテーブルの構造と同じであり、トリガーの実行が完了した後に、このトリガーに関連する二つの表も削除される。 
テーブルの操作
Inserted論理テーブル
Deleted論理テーブル
追加記録(insert)
保存の増加記録
なし
レコードを削除します。
なし
削除されたレコードを保存します。
記録の修正(udate)
更新後の記録を保存します。
更新前のレコードを保存します。
三、for、after、instead of触発器
after:トリガーは、それらのステートメントが完了したら実行します。この文がエラーで失敗した場合、トリガーは実行されません。ビューのためにafterトリガーを指定することはできません。このトリガーは表にしか指定できません。各トリガ操作(insert、udate、delete)に複数のafterトリガーを指定することができます。表にafterトリガーが複数あれば、sp_を使用できます。どのafterフリップフロップが最初に励起され、どの最後に励起されますか?最初と最後のフリップフロップ以外のすべての他のafterフリップフロップの励起順序は不確定で制御できません。
for:afterと同じです
instead of:トリガー操作の代わりにトリガーが実行されます。表とビューでinstead ofトリガーを指定できます。各トリガ操作(insert、udate、delete)に一つのinstead of触発器を定義することしかできません。instead of触発器は、insertおよびudate文で提供されるデータ値に対して、強化された完全性検査を実行するために使用されます。
四、トリガーの使用
1、トリガーを作成する:
create トリガー トリガー_name
オン {テーブルname | viewname 
{for| After | Instead 保存先 }
[ insert udate、delete ]
as
sqlstatement 
2、トリガーを削除する:
drop トリガー トリガー_name 
3、データベースにある触発器を確認する:
 プロジェクト * from syssobject where xtype='TR'
4、単一のトリガーを確認する:
exec スペスhelptext 'トリガー名 
5、トリガーを修正する:
アルター トリガー トリガー_name
オン {テーブルname | viewname 
{for| After | Instead 保存先 }
[ insert udate、delete ]
as 
sqlstatement
五、トリガーの例
1、Ordersテーブルにフリップフロップを作成し、Ordersテーブルに記録を挿入すると、goodsテーブルの商品の状態statusが1かどうかを確認します。はい、Ordersテーブルにこの注文を入れられません。if (objectid('tgr_)orders_insert 'tr is not null    drop トリガー [tgrorders_insert;gocreate トリガー [tgrorders_インディーズ [orders;after insertas if (プロジェクト [status from [goods、[inserted] where [goods.name=[inserted].name==1 begin    print 'the goods is being processed    print 'the order cannot be comitted        ロックバック トランジット   --ロールバックに参加を避ける
end