この記事は、一般的に使用される SQL トリガー ステートメントをすべての人に向けてまとめたものです。一定の参考値があります。必要な友人は参照できます。すべての人に役立つことを願っています。
1. 単純なトリガーを作成します
CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT、UPDATE 或 DELETE AS T-SQL 语句
注: トリガー名は引用符で囲まれません。
#2. トリガーの削除
drop trigger 触发器名称
drop trigger 触发器名称,触发器名称
3. トリガーの名前変更
クエリ アナライザーによる名前の変更exec sp_rename 原名称, 新名称
4. INSERT、UPDATE または DELETE
INSTEAD OF トリガー ステートメントを実行しますが、トリガーをトリガーする SQL ステートメントは実行しません。レコードが削除されると、トリガーで指定されたステートメントが実行され、この時点では削除ステートメントは実行されなくなります。例:create trigger f on tbl instead of delete as insert into Logs...
create trigger f on tbl for update as if update(status) or update(title) sql_statement --更新了 status 或 title 列
create trigger tbl_delete on tbl for delete as declare @title varchar(200) select @title=title from deleted insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')
use 数据库名 go select * from sysobjects where xtype='TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。
use 数据库名 go exec sp_helptext '触发器名称'
sp_helptrigger には 2 つのパラメーターがあります。最初のパラメーターはテーブル名で、2 番目のパラメーターはトリガーのタイプ (char(6) です) ) Type (INSERT、UPDATE、DELETE のいずれか)。省略すると、指定したテーブル内のすべてのタイプのトリガーのプロパティが表示されます。
例:
use 数据库名 go exec sp_helptrigger tbl
再帰には、間接再帰と直接再帰の 2 種類があります。例で説明すると、それぞれ T1 と T2 という名前のテーブル 1 とテーブル 2 があり、T1 と T2 にそれぞれフリップフロップ G1 と G2 があるとします。
間接再帰: T1 で操作して G1 をトリガー、G1 で T2 で操作して G2 をトリガー、G2 で T1 で操作して G1 を再度トリガーします...
直接再帰: T1 で操作して、トリガー G1 , G1 は T1 を操作して G1 を再度トリガーします...
ネストされたトリガー
は間接再帰と似ています。間接再帰はループを形成する必要がありますが、ネストされたトリガーは必ずしも形成する必要はありませんこのようにして、リングを T1->T2->T3... と連続的にトリガーでき、最大 32 レベルのネストが可能です。
直接再帰の設定
デフォルトでは、直接再帰は禁止されています。許可するように設定するには 2 つの方法があります:
T-SQL: exec sp_dboption 'dbName', '再帰トリガー'、true
EM: データベースを右クリックし、[プロパティ] > [オプション] をクリックします。
間接再帰とネストを設定する
デフォルトでは、間接再帰とネストが許可されています。これを無効にする方法は 2 つあります:
T-SQL: exec sp_configure 'ネストされたトリガー', 0 -- 2 番目のパラメータは 1 で、許可されていることを意味します。
EM: [登録] -> [プロパティ] -> [サーバー設定] を右クリックします。
9. ロールバックのトリガー多くの登録システムでは登録後にユーザー名を変更できないことがわかりましたが、これは主にアプリケーションによって決定されます。データベース テーブルを変更する場合、そのユーザー名も変更できます。トリガーでロールバックを使用すると、ユーザー名が変更できないことをうまく認識できます。
use 数据库名 go create trigger tr on 表名 for update as if update(userName) rollback tran
重要なのは最後の 2 つの文にあり、次のように説明されています。 userName 列が更新された場合は、トランザクションをロールバックします。
10. トリガーの無効化と有効化Disable: alter table テーブル名 disable trigger トリガー名
Enable: alter table テーブル名 Enable Trigger トリガー名
複数のトリガーがある場合は、トリガー名をカンマで区切ります。
「トリガー名」を「ALL」に置き換えると、テーブルのすべてのトリガーを無効または有効にすることを意味します。
11. 挿入、変更、削除を決定する
create TRIGGER [updatetest] ON [dbo].[TEST] FOR INSERT, UPDATE, DELETE AS begin DECLARE @IsInsert bit, @IsUpdate bit, @IsDelete bit IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted) SET @IsInsert = 1 ELSE SET @IsInsert = 0 IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted) SET @IsUpdate = 1 ELSE SET @IsUpdate = 0 IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted) SET @IsDelete = 1 ELSE SET @IsDelete = 0 if (@IsUpdate=1) PRINT 'updated ' if (@IsInsert=1) PRINT 'insert ' if (@IsDelete=1) PRINT 'delete 'end
以上がよく使用される SQL トリガーのステートメント (概要)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。