ホームページ > php教程 > PHP开发 > SQL Server トリガーの作成、削除、変更、表示

SQL Server トリガーの作成、削除、変更、表示

高洛峰
リリース: 2016-12-14 16:05:19
オリジナル
1177 人が閲覧しました

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 テーブルに追加されるようにします。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート