SQL SERVER 2008トリガの作成
1221 ワード
SQLSERVERトリガ内INSERT,UPDATE,DELETEの3つの状態
CREATE TRIGGER Tri_Product_OrderSnapshot ON [T_Product] for INSERT,UPDATE,DELETE
IF exists(select*from inserted)and not exists(select*from deleted)の場合INSERT
IF exists(select*from inserted)and exists(select*from deleted)の場合UPDATE
IF exists(select*from deleted)and not exists(select*from inserted)がDELETE
挿入操作(Insert):Insertedテーブルにデータがあり、Deletedテーブルにデータがない
削除操作(Delete):Insertedテーブルにデータがなく、Deletedテーブルにデータがある
更新操作(Update):Insertedテーブルにデータ(新しいデータ)、Deletedテーブルにデータ(古いデータ)
1.トリガインスタンスの挿入
2.トリガーの変更
3.トリガーの削除
CREATE TRIGGER Tri_Product_OrderSnapshot ON [T_Product] for INSERT,UPDATE,DELETE
IF exists(select*from inserted)and not exists(select*from deleted)の場合INSERT
IF exists(select*from inserted)and exists(select*from deleted)の場合UPDATE
IF exists(select*from deleted)and not exists(select*from inserted)がDELETE
挿入操作(Insert):Insertedテーブルにデータがあり、Deletedテーブルにデータがない
削除操作(Delete):Insertedテーブルにデータがなく、Deletedテーブルにデータがある
更新操作(Update):Insertedテーブルにデータ(新しいデータ)、Deletedテーブルにデータ(古いデータ)
1.トリガインスタンスの挿入
1 (ID,NAME)
2 (ID,NAME)
1 , 2
CREATE TRIGGER TRI1
ON 1
FOR INSERT
AS
BEGIN
INSERT INTO 2 SELECT * FROM INSERTED
END
GO
2.トリガーの変更
1 (ID,NAME)
2 (ID,NAME)
1 NAME , 2 ID
CREATE TRIGGER TRI3
ON 1
FOR UPDATE
AS
IF UPDATE(NAME)
BEGIN
UPDATE 2
SET A.NAME = B.NAME
FROM 2 A, INSERTED B
WHERE A.ID = B.ID
END
GO
3.トリガーの削除
1 (ID,NAME)
2 (ID,AGE,GENDER)
1 ID , 2 ID
CREATE TRIGGER TRI2
ON 1
FOR DELETE
AS
BEGIN
DECLARE @id INT
SELECT @id FROM DELETED
DELETE 2
WHERE ID = @id
END
GO