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.トリガインスタンスの挿入
 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