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
Declare @定义赋值字段名称 int 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
-- 如果需要在触发器中提示错误消息 -- 生成自定义错误消息 DECLARE @ErrorMessage NVARCHAR(255); SET @ErrorMessage=N'母代码或者子代码为空!'; -- 抛出自定义错误消息 RAISERROR(@ErrorMessage, 16, 1); -- 可选:回滚事务,以阻止对数据的更改 ROLLBACK TRANSACTION; --要返回,不然会继续执行的 RETURN;