亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > SQL Server 添加Delete操作回滾日志方式

SQL Server 添加Delete操作回滾日志方式

熱門標簽:在電子版地圖標注要收費嗎 外呼系統會封嗎 南京電銷外呼系統哪家好 地圖標注如何弄全套標 武漢AI電銷機器人 電銷機器人 深圳 萬利達綜合醫院地圖標注點 股票配資電銷機器人 實體店地圖標注怎么標

我們在操作表的時候難免會遇到誤刪除,或者刪掉的數據還想恢復的情況。

也許細心的朋友會用begin tran rollback/commit 這種事務來避免出現失誤,但這并不是最保險的。

如果提交了事物發現刪錯了或者忘記提交從而導致表被鎖,這些問題總是不可避免的。

廢話不多說了,下面直接進入正題,通過觸發器記錄刪除日志,避免誤刪除帶來的尷尬。

下面這段sql粘過去直接運行,建立一個存儲過程:

CREATE PROCEDURE [dbo].[SP_DELETE_LOG]
 @TABLENAME VARCHAR(50)
AS
BEGIN
	SET NOCOUNT ON;
 IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @TABLENAME AND TYPE = 'U' )
	BEGIN
		PRINT'ERROR:not exist table '+@TABLENAME
		RETURN
	END
	IF (@TABLENAME LIKE'BACKUP_%' OR @TABLENAME='UPDATE_LOG' )
	BEGIN
		--PRINT'ERROR:not exist table '+@TABLENAME
		RETURN
	END
	--================================判斷是否存在 UPDATE_LOG 表============================
	IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = 'UPDATE_LOG' AND TYPE = 'U')
		CREATE TABLE UPDATE_LOG
		(
			UpdateGUID VARCHAR(36),
			UpdateTime DATETIME,
			TableName varchar(20),
			UpdateType varchar(6),
			RollBackSQL varchar(1000)
		)
	--=================================判斷是否存在 BACKUP_ 表================================
	IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = 'BACKUP_'+@TABLENAME AND TYPE = 'U')
	BEGIN
		--DECLARE @SQL VARCHAR(500)
		--SET @SQL='SELECT TOP 1 NEWID() AS [UpdateGUID],* INTO BACKUP_'+@TABLENAME+' FROM '+ @TABLENAME+'
		--		 DELETE FROM BACKUP_'+@TABLENAME
		--SELECT @SQL
		--EXEC(@SQL)
		DECLARE test_Cursor CURSOR FOR
		SELECT COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.columns 
		WHERE TABLE_NAME=@TABLENAME
		OPEN test_Cursor
		DECLARE @SQLTB NVARCHAR(MAX)=''
		DECLARE @COLUMN_NAME NVARCHAR(50),@DATA_TYPE VARCHAR(20),@CHARACTER_MAXIMUM_LENGTH INT
		FETCH NEXT FROM test_Cursor INTO @COLUMN_NAME,@DATA_TYPE,@CHARACTER_MAXIMUM_LENGTH
		WHILE @@FETCH_STATUS=0
		BEGIN
			SET @SQLTB=@SQLTB+'['+@COLUMN_NAME+'] '+@DATA_TYPE+CASE ISNULL(@CHARACTER_MAXIMUM_LENGTH,0) WHEN 0 THEN '' WHEN -1 THEN '(MAX)' ELSE'('+CAST(@CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10))+')' END+','
			FETCH NEXT FROM test_Cursor INTO @COLUMN_NAME,@DATA_TYPE,@CHARACTER_MAXIMUM_LENGTH
		END
		SET @SQLTB='CREATE TABLE BACKUP_'+@TABLENAME+' (UpdateGUID varchar(36),'+SUBSTRING(@SQLTB,1,LEN(@SQLTB)-1)+')'
		EXEC (@SQLTB)
		CLOSE test_Cursor 
		DEALLOCATE test_Cursor
	END
	--======================================判斷是否存在 DELETE 觸發器=========================
	IF NOT EXISTS(SELECT * FROM sys.objects WHERE NAME = 'tg_'+@TABLENAME+'_Delete' AND TYPE = 'TR')
	BEGIN
		DECLARE @SQLTR NVARCHAR(MAX)
		SET @SQLTR='
			CREATE TRIGGER tg_'+@TABLENAME+'_Delete
				ON '+@TABLENAME+'
				AFTER delete
			AS 
			BEGIN	
				SET NOCOUNT ON;
				--==============================獲取GUID==========================================
				DECLARE @NEWID VARCHAR(36)=NEWID()
				--==============================將刪掉的數據插入備份表============================
				INSERT INTO [dbo].[BACKUP_'+@TABLENAME+']
				SELECT @NEWID,* FROM deleted
				--==============================記錄日志和回滾操作的SQL===========================
				--*********************生成列名**********************
				DECLARE @COLUMN NVARCHAR(MAX)=''''
				SELECT @COLUMN+='',[''+COLUMN_NAME+'']'' FROM INFORMATION_SCHEMA.columns
				WHERE TABLE_NAME='''+@TABLENAME+''' 
				AND COLUMNPROPERTY(OBJECT_ID('''+@TABLENAME+'''),COLUMN_NAME,''IsIdentity'')>1 --非自增字段
				SET @COLUMN=SUBSTRING(@COLUMN,2,LEN(@COLUMN))
				INSERT INTO [dbo].[UPDATE_LOG]
				SELECT @NEWID,GETDATE(),'''+@TABLENAME+''',''DELETE'',''INSERT INTO '+@TABLENAME+' SELECT ''+@COLUMN+'' FROM BACKUP_'+@TABLENAME+' WHERE UPDATEGUID=''''''+@NEWID+''''''''
			END
			'
		EXEC(@SQLTR)
	END
END

接著我們新建一張測試表,并且隨便往表中插入兩組數據:

 Create table test 
 (
 id int,
 name varchar(10),
 msg varchar(10)
 )
 Insert into test
 Select 1,'aa','hahah'
 Union all 
 Select 2,'bb','heihei'

下面執行這個SP,在給test表添加回滾日志:

EXEC SP_DELETE_LOG 'test'

細心的你不難發現,這時候數據庫里面應該會多出兩張表:

然后我們刪掉一條數據:

DELETE FROM test WHERE id=1

再查看那兩張表:

沒錯,這時候日志表里有數據了,然后我們把 UPDATE_LOG 表中的 RollBackSQ L這一列對應的值copy出來執行一下:

INSERT INTO test SELECT [id],[name],[msg] FROM BACKUP_test WHERE UPDATEGUID='B0CBBC4F-3432-4D4F-9E17-F17209BF6745'

別copy我上面這段sql,因為GUID肯定是不一樣的!

然而,數據恢復了:

最后,delete日志的介紹就結束了,唯一的不滿足的是只能作用在Delete 操作,其實UPDATE 操作也同樣需要這樣的回滾日志。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • SqlServer2008誤操作數據(delete或者update)后恢復數據的方法
  • sqlserver中drop、truncate和delete語句的用法
  • sqlserver中delete、update中使用表別名和oracle的區別
  • SQLServer 2008中SQL增強之三 Merge(在一條語句中使用Insert,Update,Delete)

標簽:武威 廣東 濟寧 安徽 臺州 汕頭 泰安 濟源

巨人網絡通訊聲明:本文標題《SQL Server 添加Delete操作回滾日志方式》,本文關鍵詞  SQL,Server,添加,Delete,操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server 添加Delete操作回滾日志方式》相關的同類信息!
  • 本頁收集關于SQL Server 添加Delete操作回滾日志方式的相關信息資訊供網民參考!
  • 推薦文章
    黄视频网站在线看| 天天做日日爱| 四虎影视精品永久免费网站| 国产一区二区精品久久91| 99色视频在线观看| 四虎影视精品永久免费网站| 可以免费看污视频的网站| 国产成人女人在线视频观看| 久草免费资源| 国产视频久久久| 91麻豆精品国产高清在线| 久久国产一区二区| 精品视频在线观看一区二区 | 精品久久久久久影院免费| 精品久久久久久影院免费| 国产91视频网| 一级毛片看真人在线视频| 国产高清视频免费| 午夜精品国产自在现线拍| 成人a级高清视频在线观看| 国产高清视频免费| 国产一区二区精品尤物| 尤物视频网站在线| 免费一级片在线观看| 精品视频在线看| 天天色色色| 色综合久久天天综合观看| 亚欧视频在线| 成人在激情在线视频| 99热热久久| a级黄色毛片免费播放视频 | 国产一区二区精品久久91| 亚洲精品久久久中文字| 精品久久久久久中文字幕2017| 欧美大片a一级毛片视频| 国产高清在线精品一区二区| 色综合久久手机在线| 久久久久久久免费视频| 国产视频一区二区在线观看| 亚洲第一色在线| 精品国产一区二区三区免费| 日韩在线观看视频网站| 欧美另类videosbestsex视频| 精品国产一区二区三区久| 夜夜操网| 999精品在线| 99色视频在线观看| 亚久久伊人精品青青草原2020| 韩国三级视频网站| 久久国产精品自由自在| 夜夜操网| 国产国语对白一级毛片| 成人影院久久久久久影院| 国产伦精品一区三区视频| 国产91精品一区| 日韩一级精品视频在线观看| 一级毛片看真人在线视频| 国产伦精品一区二区三区无广告| 亚洲女人国产香蕉久久精品 | 欧美激情一区二区三区在线| 国产网站麻豆精品视频| 精品国产一区二区三区久久久狼| 99色视频在线观看| 成人免费观看网欧美片| 国产一区二区精品久| 欧美大片a一级毛片视频| 久久99青青久久99久久| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 超级乱淫黄漫画免费| 99久久精品国产高清一区二区 | 999精品在线| 成人a级高清视频在线观看| 欧美激情一区二区三区视频| 成人高清护士在线播放| 国产伦理精品| 日韩男人天堂| 四虎影视久久久| 国产极品精频在线观看| 亚欧视频在线| 日韩一级黄色| 国产国语对白一级毛片| 中文字幕一区二区三区精彩视频 | 美女免费精品视频在线观看| 可以免费看污视频的网站| 国产福利免费观看| 欧美大片a一级毛片视频| 999精品在线| 日本免费区| 成人免费一级毛片在线播放视频| 日韩一级精品视频在线观看| 在线观看导航| 欧美另类videosbestsex高清| 亚洲精品久久久中文字| 欧美激情一区二区三区在线| 久久精品免视看国产明星| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 尤物视频网站在线| 国产不卡在线播放| 国产伦久视频免费观看 视频 | 日韩专区一区| 日韩在线观看视频黄| 成人免费高清视频| 国产一级强片在线观看| 91麻豆国产| 午夜欧美福利| 午夜欧美福利| 九九久久国产精品| 国产不卡在线播放| 国产一区二区福利久久| 999精品在线| 精品久久久久久中文字幕2017| 欧美另类videosbestsex视频| 日本特黄一级| 国产91视频网| 免费一级片在线观看| 欧美国产日韩在线| 999精品在线| 国产成a人片在线观看视频| 亚洲女人国产香蕉久久精品 | 天天做日日干| 国产伦精品一区三区视频| 四虎影视库国产精品一区| 国产视频久久久| 91麻豆精品国产高清在线| 欧美激情一区二区三区中文字幕| 久久国产一区二区| 国产一区国产二区国产三区| 沈樵在线观看福利| 久久99这里只有精品国产| 精品视频在线看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产一区国产二区国产三区| 国产综合成人观看在线| 午夜精品国产自在现线拍| 韩国三级视频在线观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 韩国三级香港三级日本三级la| 欧美另类videosbestsex高清| 国产91视频网| 欧美大片毛片aaa免费看| 成人免费一级毛片在线播放视频| 欧美另类videosbestsex视频| 欧美1卡一卡二卡三新区| 国产福利免费观看| 99久久精品国产国产毛片| 国产成人精品影视| 国产伦理精品| 成人a级高清视频在线观看| 欧美国产日韩在线| 精品视频在线观看一区二区 | 欧美一区二区三区在线观看| 黄色免费网站在线| 成人a大片高清在线观看| 亚洲 男人 天堂| 日本伦理片网站| 国产激情一区二区三区| 成人免费高清视频| 国产不卡在线播放| 韩国三级视频网站| 二级特黄绝大片免费视频大片| 午夜在线影院| 亚洲精品中文一区不卡| 一级女性大黄生活片免费| 欧美另类videosbestsex视频| 国产不卡在线看| 台湾美女古装一级毛片| 国产一区二区福利久久| 国产不卡精品一区二区三区| 日韩中文字幕在线亚洲一区| 国产欧美精品| 欧美激情一区二区三区在线| 999久久狠狠免费精品| 日本特黄一级| 精品国产一区二区三区国产馆| 沈樵在线观看福利| 二级特黄绝大片免费视频大片| 亚洲女人国产香蕉久久精品 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产伦精品一区三区视频| 国产综合成人观看在线| 午夜久久网| 国产网站在线| 成人高清护士在线播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美另类videosbestsex视频| 精品美女| 午夜在线影院| 国产a视频| 日韩专区一区| 欧美激情一区二区三区视频| 久久国产精品自由自在| 日韩av东京社区男人的天堂| 精品国产一区二区三区免费| 亚洲女人国产香蕉久久精品 | 欧美另类videosbestsex视频| 国产视频一区二区在线观看| 国产网站在线| 日本在线www| 日韩avdvd| 日本特黄特色aaa大片免费|