レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

トリガのテンプレート

SQLServerのトリガーを作ったので、テンプレートとしてあげときます。

target_table (トリガ設定テーブル)

カラム
col_1 int identity
col_2 nvarchar(50)

trgger_ins_data(トリガ実行結果登録テーブル)

カラム
ID int identity
Msg nvarchar(50)


トリガのテンプレートクエリ

CREATE TRIGGER [my_trigger] ON  [target_table] AFTER INSERT,DELETE,UPDATE
AS BEGIN
	--トリガ内で処理された行数を示すメッセージが結果セットの一部として返されないようにします。
	SET NOCOUNT ON; 
	
	-- 変数宣言例
	declare @col_1_data as nvarchar(50);

	------------------------------------------
	-- トリガ内のみinsertedテーブルが利用可能となります。
	-- 同じくdeletedテーブルも利用可能です。
	-- UPDATE文の場合には、deletedテーブルに更新前のデータが格納され、
	-- insertedテーブルに更新後のデータが格納されます
	-- 複数行が1度に更新された場合もトリガの起動は1回だけです。
	-- その場合、insertedとdeletedに対象となった複数行が入ります。
	------------------------------------------

	-- 変数に値をセットするには([col_1]は元テーブルの列名)
	select @col_1_data = [col_1] from inserted

	--Insertするには
	--※「trgger_ins_data」はダミーテーブル
	insert into trgger_ins_data( Msg )values( @col_1_data );

	-- 下記IFでの対象列更新時のみ動作する処理
	IF UPDATE([col_1]) AND UPDATE([col_2]) BEGIN
		--処理
	END 
	
END