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数据库中在更新表数据时出现的问题。


数据运维技术 » MSSQL触发器实现数据库回滚操作(mssql 触发器 回滚)