SQL Server添加删除操作回滚日志方式
  • 作者:admin
  • 发表时间:2021-01-20 07:57
  • 来源:未知

这篇文章主要介绍了数据库添加删除操作回滚日志方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我们在操作表的时候难免会遇到误删除,或者删掉的数据还想恢复的情况。

也许细心的朋友会用开始事务回滚/提交这种事务来避免出现失误,但这并不是最保险的。

如果提交了事物发现删错了或者忘记提交从而导致表被锁,这些问题总是不可避免的。

废话不多说了,下面直接进入正题,通过触发器记录删除日志,避免误删除带来的尴尬。

下面这段结构化查询语言粘过去直接运行,建立一个存储过程:

CREATE PRocESS[dbo].[服务点_删除_日志]

@TABLENAME VARCHAR(50)

如同

开始

设置无计数开启;

如果不存在(从系统表中选择*,其中名称=@表名,类型='U ')

开始

"打印"错误:不存在表" @TABLENAME "

返回

结束

IF (@TABLENAME喜欢“BACKUP_%”或@TABLENAME='UPDATE_LOG ')

开始

-打印错误:不存在表@TABLENAME

返回

结束

-================================判断是否存在更新日志表============================

如果不存在(从系统表中选择*,其中名称='更新日志A唐山应用开发钕类型='U ')

创建表更新日志

UpdateGUID VARCHAR(36),

UpdateTime DATETIME,

TableName varchar(20),

UpdateType varchar(6),

rollBackql varchar(1000)

)

-=================================判断是否存在备份\u表================================

如果不存在(从系统表中选择*,其中名称='备份_ ' @表名和类型='用户)

开始

- DECLARE @SQL VARCHAR(500)

-SET @ SQL=' SELECT TOP 1 new id()AS[UpdateGUID],* INTO BACKUP _ ' @ TABLENAME ' FROM ' @ TABLENAME '

-从备份中删除_ ' @表名

- SELECT @SQL

- EXEC(@SQL)

声明测试光标

从信息模式中选择列名、数据类型、字符最大长度

其中表名=@表名

打开测试_光标

DECLARE @SQLTB NVARCHAR(MAX)=' '

@ DECLARE _ NAME NVARCHAR(50),@ DATA _ TYPE VARCAR(20),@ Character _ max _ LENGTH INT

从测试游标获取下一个到因特网网址中列名,@数据类型,@字符最大长度

WHILE @ @ FETCH _ STATUS=0

开始

SET @ SQLTB=@ SQLTB '[' @ COLUMN _ NAME ']' @ DATA _ TYPE CASE为空(@ CHARACTER _ MAX _ LENGTH,0)WHEN 0 THEN ' ' WHEN-1 THEN '(MAX)' ELSE '(' CAST(@ CHARACTER _ MAX _ LENGTH AS VARCHAR(10))')' END ','

从测试游标获取下一个到因特网网址中列名,@数据类型,@字符最大长度