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;

  

posted @ 2021-12-09 10:05  LuoCore  阅读(44)  评论(0编辑  收藏  举报