MSSQL触发器实现数据库回滚操作(mssql 触发器 回滚)
MSSQL触发器是一种特殊的数据库对象,能够实现表更新前后的数据回滚,实现一次性的状态更新多表的功能,可以有效的防止MSSQL数据库锁更新表中的数据。
MSSQL触发器是以特殊的方式实现的,它可以实现在更新数据库的数据表前执行校验操作,或者在更新完之后可以执行特定的操作,比如发送消息或者执行指定的操作等。
MSSQL触发器的实现方式有两种,即基于DML语句和基于DDL语句。
1、基于DML语句。
DML语句是数据库管理语言(Data Manipulation Language)中的用于管理数据库表中数据的语句,其中最常用的指令分别为SELECT, INSERT, UPDATE, DELETE和MERGE等。在使用MSSQL触发器基于DML语句时,可以通过定义一个包含对指定表的插入、更新、删除、查询语句的触发器,来实现数据的回滚,及即使删除了某种数据,也可以将其恢复到原始的状态。
下面是创建一个基于DML语句触发器的示例代码:
CREATE TRIGGER tr_DataBaseRollBack
ON MyDataBase
AFTER INSERT,UPDATE,DELETE
AS
BEGIN
SET NOCOUNT ON
DECLARE @TableName varchar(255),
@SqlStr varchar(MAX),
@TableName2 varchar(255),
@SqlStr2 varchar(MAX);
SELECT @TableName=name
FROM sysobjects
WHERE id=OBJECT_ID(‘MyDataBase’);
SELECT @TableName2=name
FROM sysobjects
WHERE id=OBJECT_ID(‘MyDataBase_Bak’);
SET @SqlStr=’select * into ‘+@TableName2+’ FROM ‘+@TableName+’;’;
SET @SqlStr2=’drop table ‘+@TableName2;
IF EXISTS(SELECT * from inserted)
BEGIN
IF EXISTS(SELECT * from MyDataBase_Bak)
BEGIN
EXECUTE(@SqlStr2);
END
EXECUTE(@SqlStr);
END
END
2、基于DDL语句。
DDL是数据库设计语言(Data Definition Language)中的一种语言,其中包含ALTER、CREATE以及DROP等命令,可以用来实现在更新数据表前启动特定程序来检验数据,并实现数据的回滚。
例如,可以通过定义一个基于DDL语句的触发器,来实现在更新数据表前启动特定的流程,从而进行数据的回滚。
下面是一个基于DDL语句的实例:
CREATE TRIGGER tr_DataBaseRollback
ON MyDataBase
FOR ALTER_TABLE AS
BEGIN
SET NOCOUNT ON
DECLARE @TableName varchar(255),
@SqlStr varchar(MAX),
@TableName2 varchar(255),
@SqlStr2 varchar(MAX);
SELECT @TableName=name
FROM sysobjects
WHERE id=OBJECT_ID(‘MyDataBase’);
SELECT @TableName2=name
FROM sysobjects
WHERE id=OBJECT_ID(‘MyDataBase_Bak’);
SET @SqlStr=’select * into ‘+@TableName2+’ FROM ‘+@TableName+’;’;
SET @SqlStr2=’drop table ‘+@TableName2;
EXECUTE(@SqlStr2);
EXECUTE(@SqlStr);
END
综上,MSSQL触发器既可以实现基于DML语句数据的回滚,又可以实现基于DDL语句的回滚,能够有效的防止MSSQL数据库中在更新表数据时出现的问题。