1つ目: トリガーは、明示的に呼び出すことはできない特別なストアド プロシージャですが、レコードがテーブルに挿入、更新、または削除されると自動的にアクティブ化されます。したがって、トリガーを使用して、テーブルに複雑な整合性制約を実装できます。
2: SQL Server は、トリガーごとに 2 つの専用テーブル (挿入テーブルと削除テーブル) を作成します。これら 2 つのテーブルはシステムによって維持され、データベースではなくメモリ内に存在します。これら 2 つのテーブルの構造は、トリガーによって作用されるテーブルの構造と常に同じです。トリガーの実行が完了すると、トリガーに関連する 2 つのテーブルも削除されます。
Deleted テーブルには、Delete ステートメントまたは Update ステートメントの実行によりテーブルから削除されるすべての行が格納されます。
Inserted テーブルには、Insert または Update ステートメントの実行によりテーブルに挿入されるすべての行が格納されます。
3: 代わりのトリガーと後トリガー
SQL Server2000 には、代わりのトリガーと後トリガーの 2 種類のトリガーが用意されています。これら 2 つのトリガーの違いは、同じ方法でアクティブ化されることです。
トリガーの代わりに、トリガーを実行させる T-SQL ステートメントを置き換えるのに使用されます。テーブルに加えて、ビューでサポートする更新操作を拡張するために、ビューで代わりのトリガーを使用することもできます。
After トリガーは、Insert、Update、または Deleted ステートメントの後に実行され、制約チェックなどのアクションは After トリガーがアクティブになる前に発生します。 After トリガーはテーブルでのみ使用できます。
テーブルまたはビューの各変更アクション (挿入、更新、削除) には、代わりのトリガーを含めることができ、テーブルの各変更アクションには複数の After トリガーを含めることができます。
IV: トリガー実行プロセス
Insert、update、または delete ステートメントが制約に違反する場合、After トリガーが励起される前に制約のチェックが発生するため、After トリガーは実行されません。したがって、After トリガーは制約を超えることはできません。
代わりに トリガーを起動したアクションの代わりにトリガーを実行できます。これは、挿入されたテーブルと削除されたテーブルが作成されたばかりで、他の操作が発生していないときに実行されます。 Updated of トリガーは制約の前に実行されるため、制約の前処理を行うことができます。
5: T-SQLステートメントを使用してトリガーを作成します
基本的なステートメントは次のとおりです:
create Trigger_name
on {table_name | view_name}
{for | After | update ,delete ]
as
sql_statement
6: トリガーの削除:
基本的なステートメントは次のとおりです:
droptriggertrigger_name
7: データベース内の既存のトリガーを表示します:
-- データベース内の既存のトリガーを表示します。データベースの使用以下:
altertrigger_name
on {table_name | view_name}
{for | After | Both of }
[ insert, update,delete ]
as
sql_statement
Nine: 1 : Orders テーブルで Orders テーブルにトリガーを作成します。 Orders テーブルに注文レコードを挿入するときに、商品テーブルの商品のステータスが 1 (整理中) であるかどうかを確認します。注文テーブル。
トリガーorderinsert
onorders
after insert
as
if (select status from Goods,inserted
where Goods.name=inserted.goodsname)=1
begin
print '商品は処理済み'
print '注文はコミットできません'
ロールバックトランザクション --ロールバック、追加を回避
end
2: Ordersテーブルに挿入トリガーを作成し、注文を追加するときに、対応する商品の数を減らしますテーブルアイテムレコードの在庫。
注文にトリガー orderinsert1 を作成します
as
商品セット storage=storage-inserted.quantity を更新します
from Goods,inserted
where
goods.name=inser 3:削除を作成するGoods テーブルのトリガーを使用して、Goods テーブルと Orders テーブルのカスケード削除を実装します。 creats goodsdeleteを作成するgoodsdelete
を削除した後、注文から削除するdelete where goodsnamein
(削除から選択した名前)
4:注文テーブルに更新トリガーを作成して注文s table 手動で変更できないようにする注文日 (OrderDate) 列です。
create Trigorderdateupdate
onorders
after update
as
if update(orderdate)
begin
raiseerror('orderdate はできません変更されました' ,10,1)
ロールバックトランザクション
end
5: Orders テーブルに挿入トリガーを作成して、Orders テーブルに挿入された製品名が Goods テーブルに存在する必要があることを確認します。
トリガー orderinsert3 を作成します
注文時に
挿入後に
as
if (select count(*) from Goods,inserted where Goods.name=inserted.goodsname)=0
begin
print 'この注文の商品にエントリはありません'
ロールバックトランザクション
end
6: Orders テーブルに挿入トリガーを作成して、Orders テーブルに挿入された製品情報が Orders テーブルに追加されるようにします。