-- =============================================
-- 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;