SQL Server 触发器


-- =============================================
-- Author:		<作者>
-- Create date: <时间>
-- Description:	<功能说明>
-- =============================================
CREATE TRIGGER 触发器名称  --如果是修改用 ALTER
   ON  表名
   AFTER DELETE,INSERT,UPDATE --触发器事件
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 @IsInsert = 1 BEGIN
		--插入事件被触发执行
             DECLARE 触发器名称 CURSOR FOR SELECT 表字段 FROM inserted;
		OPEN 触发器名称;
		FETCH NEXT FROM 触发器名称 INTO 定义赋值字段名称;
		WHILE(@@FETCH_STATUS=0) 
		BEGIN
			--要执行的动作
			FETCH NEXT FROM 触发器名称 INTO 定义赋值字段名称;
		END
		CLOSE 触发器名称;
		DEALLOCATE 触发器名称
	END
 
	IF @IsUpdate=1 BEGIN
		--修改事件被触发执行,在这里会多一个 Deleted 表,看需不需要用到
              DECLARE 触发器名称 CURSOR FOR SELECT 表字段 FROM inserted;
		OPEN 触发器名称;
		FETCH NEXT FROM 触发器名称 INTO 定义赋值字段名称;
		WHILE(@@FETCH_STATUS=0) 
		BEGIN
			--要执行的动作
			FETCH NEXT FROM 触发器名称 INTO 定义赋值字段名称;
		END
		CLOSE 触发器名称;
		DEALLOCATE 触发器名称
	END;

	IF @IsDelete = 1 BEGIN
		--删除事件被触发执行
               DECLARE 触发器名称 CURSOR FOR SELECT 表字段 FROM Deleted;
		OPEN 触发器名称;
		FETCH NEXT FROM 触发器名称 INTO 定义赋值字段名称;
		WHILE(@@FETCH_STATUS=0) 
		BEGIN
			--要执行的动作
			FETCH NEXT FROM 触发器名称 INTO 定义赋值字段名称;
		END
		CLOSE 触发器名称;
		DEALLOCATE 触发器名称
	END
END
                        
SQL