この記事は、一般的に使用される SQL トリガー ステートメントをすべての人に向けてまとめたものです。一定の参考値があります。必要な友人は参照できます。すべての人に役立つことを願っています。
1. 単純なトリガーを作成します
CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT、UPDATE 或 DELETE AS T-SQL 语句
注: トリガー名は引用符で囲まれません。
#2. トリガーの削除
drop trigger 触发器名称複数のトリガーの削除:
drop trigger 触发器名称,触发器名称
3. トリガーの名前変更
クエリ アナライザーによる名前の変更exec sp_rename 原名称, 新名称sp_rename は SQL Server に付属するストアド プロシージャで、現在のデータベース内でユーザーが作成したオブジェクト (テーブル名、リスト、インデックス名など) の名前を変更するために使用されます。 . .
4. INSERT、UPDATE または DELETE
INSTEAD OFトリガー ステートメントを実行しますが、トリガーをトリガーする SQL ステートメントは実行しません。レコードが削除されると、トリガーで指定されたステートメントが実行され、この時点では削除ステートメントは実行されなくなります。例:create trigger f on tbl instead of delete as insert into Logs...IF UPDATE(列名)列が更新されたかどうかを確認します。挿入または更新には使用されますが、削除には使用できません。例:
create trigger f on tbl for update as if update(status) or update(title) sql_statement --更新了 status 或 title 列inserted、deletedこれらは 2 つの仮想テーブルです。insert は挿入または更新後に影響を受けるレコードによって形成されたテーブルを保存し、deleted は削除または更新前に形成されたテーブルを保存します。影響を受けるレコードによって形成されるテーブル。例:
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 + '的记录')説明: フィールドタイプがテキストまたはイメージのフィールド値を、挿入または削除された仮想テーブルから取得した場合、取得された値は null になります。 #5. データベース内のすべてのトリガーを表示します
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 tbl8. 再帰、ネストされたトリガー
再帰には、間接再帰と直接再帰の 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 サイトの他の関連記事を参照してください。