ホームページ php教程 PHP开发 SQL Server: トリガーの詳細な説明

SQL Server: トリガーの詳細な説明

Dec 14, 2016 pm 04:11 PM

1. 概要

トリガーは、明示的に呼び出すことはできない特殊なストアド プロシージャですが、テーブルにレコードが挿入、更新、または削除されると自動的にアクティブになります。 したがって、トリガーを使用して、テーブルに複雑な整合性制約を実装できます。

2. トリガーの分類

SQL Server2000 には、「Instead of」トリガーと「After」トリガーの 2 種類のトリガーが用意されています。

テーブルまたはビューの各変更アクション (挿入、更新、および削除) には「代わりに」トリガーを設定でき、テーブルの各変更アクションには複数の「後」トリガーを設定できます。

2.1 「Instead of」トリガー

「Instead of」トリガーは、実際の「挿入」が実行される前に実行されます。テーブルに加えて、ビューで「代わりに」トリガーを使用して、ビューがサポートできる更新操作を拡張することもできます。

「代わりに」トリガーは、実行される SQL ステートメントを置き換えます。つまり、実行される SQL ステートメントは「実際には実行されません」

alter trigger trigger_学生_Delete
on 学生
instead of Delete
as
begin
    select 学号, 姓名 from deleted
end
 
delete from 学生 where 学号 = 4
ログイン後にコピー

上の例では、「トリガー Student_Delete」トリガーが定義されています。プロセッサは、「削除」テーブルから削除する生徒を出力します。「削除」操作を実行した後、「生徒番号 = 4」の生徒が削除されていないことがわかります。これは、「生徒の削除をトリガーしたため」です。 「」は、実行される「trigger students Delete」を置き換えます。delete from students where students number = 4」ステートメントですが、「trigger students_Delete」では実際に生徒は削除されません。

2.2 「後」トリガー

「後」トリガーは、Insert、Update、または Deleted ステートメントの実行後にトリガーされます。 「After」トリガーはテーブルでのみ使用できます。

「After」トリガーは主に、テーブルの変更後 (挿入、更新、または削除操作の後) に他のテーブルを変更するために使用されます

3. 挿入テーブルと削除テーブル

SQL Server は、特殊テーブルごとに 2 つのトリガーを作成します: 挿入テーブルおよび削除されたテーブル。

これら 2 つのテーブルはシステムによって維持され、データベースではなくメモリ内に存在し、仮想テーブルとして理解できます。

これら 2 つのテーブルの構造は、トリガーによって作用されるテーブルの構造と常に同じです。

トリガーの実行完了後、トリガーに関連する2つのテーブルも削除されます。

削除済みテーブルには、Delete ステートメントまたは Update ステートメントの実行によりテーブルから削除されるすべての行が格納されます。

Inserted テーブルには、Insert または Update ステートメントの実行によりテーブルに挿入されるすべての行が格納されます。

SQL Server: トリガーの詳細な説明

4. トリガー実行プロセス

Insert、update、または delete ステートメントが制約に違反する場合、この SQL ステートメントは正常に実行されないため、「After」トリガーはアクティブになりません。

「代わりに」トリガーは、それを起動したアクションの代わりに実行できます。これは、挿入されたテーブルと削除されたテーブルが作成されたばかりで、他の操作が発生していないときに実行されます。 「Instead of」トリガーは制約の前に実行されるため、制約の前処理を行うことができます。

5. トリガーを作成します

create trigger trigger_name
on  {table_name|view_name}
{After|Instead of} {insert|update|delete}
as 相应T-SQL语句
ログイン後にコピー

6. トリガーを変更します:

alter trigger trigger_name
on  {table_name|view_name}
{After|Instead of} {insert|update|delete}
as 相应T-SQL语句
ログイン後にコピー

8. トリガーを削除します。トリガーイン:

8.1 データベース内のすべてのトリガーを表示します

drop trigger trigger_name
ログイン後にコピー

8.2 単一のトリガーを表示します

select * from sysobjects where xtype='TR'
ログイン後にコピー

9. 「代わりに」関連する例:

2 つのテーブル:student (student Number int, name varchar)、貸出記録 (学生番号 int、図書番号 int)

実装された関数: 学生テーブルを削除するとき、学生に貸出記録 (未返却) が残っている場合は削除できません

exec sp_helptext '触发器名'
ログイン後にコピー

「10. 「トリガー

10.1 「受注」テーブルにトリガーを作成します。「受注」テーブルに受注レコードを挿入する際、「商品」テーブルの商品ステータスの「ステータス」が1(整理中)かどうかを確認します。注文を「注文」テーブルに追加することはできません。

alter trigger trigger_学生_Delete
on 学生
instead of Delete
as
begin
    if not exists(select * from 借书记录, deleted where 借书记录.学号 = deleted.学号)
        delete from 学生 where 学生.学号 in (select 学号 from deleted)
end
ログイン後にコピー

この例では、「pid」が商品コードです

​​

この例のif判定は厳密に言えば不正確です、なぜなら毎回「order」テーブルにレコードを挿入していれば問題ないからです複数のレコードが挿入された場合、「選択ステータス」は複数の行を返します。

10.2 「注文」テーブルに挿入トリガーを作成し、注文を追加する際に、「商品」テーブルの対応する商品レコードの在庫を削減します。

りー

10.3 在“商品”表建立删除触发器,实现“商品”表和“订单”表的级联删除。

create trigger goodsdelete trigger_商品_delete
on 商品
after delete
as
    delete from 订单 where 订单.pid in (select pid from deleted)
ログイン後にコピー

10.4 在“订单”表建立一个更新触发器,监视“订单”表的“订单日期”列,使其不能被“update”.

create trigger trigger_订单_update
on 订单
after update
as
    if update(订单日期)
    begin
        raiserror('订单日期不能手动修改',10,1)
        rollback transaction
    end
ログイン後にコピー

10.5 在“订单”表建立一个插入触发器,保证向“订单”表插入的货品必须要在“商品”表中一定存在。

create trigger trigger_订单_insert3
on 订单
after insert
as
    if (select count(*) from 商品, inserted where 商品.pid = inserted.pid)=0
    begin
        print '商品不存在'
        rollback transaction
    end
ログイン後にコピー

10.6 “订单”表建立一个插入触发器,保证向“订单”表插入的货品信息要在“订单日志”表中添加

alter trigger trigger_订单_insert
on 订单
for insert
as
    insert into 订单日志 select inserted.Id, inserted.pid,inserted.数量 from inserted
ログイン後にコピー

   


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)