这篇文章主要介绍了数据库添加删除操作回滚日志方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
我们在操作表的时候难免会遇到误删除,或者删掉的数据还想恢复的情况。
也许细心的朋友会用开始事务回滚/提交这种事务来避免出现失误,但这并不是最保险的。
如果提交了事物发现删错了或者忘记提交从而导致表被锁,这些问题总是不可避免的。
废话不多说了,下面直接进入正题,通过触发器记录删除日志,避免误删除带来的尴尬。
下面这段结构化查询语言粘过去直接运行,建立一个存储过程:
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 ','
从测试游标获取下一个到因特网网址中列名,@数据类型,@字符最大长度