婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

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

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

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

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

下面這段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 觸發(fā)器=========================
	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()
				--==============================將刪掉的數(shù)據(jù)插入備份表============================
				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

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

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

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

EXEC SP_DELETE_LOG 'test'

細心的你不難發(fā)現(xiàn),這時候數(shù)據(jù)庫里面應該會多出兩張表:

然后我們刪掉一條數(shù)據(jù):

DELETE FROM test WHERE id=1

再查看那兩張表:

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

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

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

然而,數(shù)據(jù)恢復了:

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

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

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

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

巨人網(wǎng)絡通訊聲明:本文標題《SQL Server 添加Delete操作回滾日志方式》,本文關鍵詞  SQL,Server,添加,Delete,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server 添加Delete操作回滾日志方式》相關的同類信息!
  • 本頁收集關于SQL Server 添加Delete操作回滾日志方式的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美午夜电影一区| 国产麻豆精品95视频| 亚洲裸体在线观看| 免费在线看成人av| 本田岬高潮一区二区三区| 欧美色图片你懂的| 久久精品水蜜桃av综合天堂| 亚洲精品视频在线| 国产成人精品综合在线观看 | 欧美视频完全免费看| 精品国产污污免费网站入口| 亚洲男人天堂av网| 国产麻豆9l精品三级站| 91麻豆精品国产91久久久使用方法| 久久女同精品一区二区| 天天操天天色综合| 欧美在线视频全部完| 国产精品妹子av| 国产精品一区二区你懂的| 欧美一区二区黄| 男男成人高潮片免费网站| 精品视频在线视频| 亚洲黄色在线视频| 99视频一区二区三区| 欧美激情一区二区在线| 国模冰冰炮一区二区| 欧美草草影院在线视频| 麻豆精品视频在线观看视频| 欧美日韩美少妇| 日韩精品午夜视频| 4hu四虎永久在线影院成人| 天堂va蜜桃一区二区三区漫画版| 欧美日免费三级在线| 天天操天天色综合| 欧美一区日韩一区| 久久成人久久爱| 精品视频在线免费观看| 亚洲国产三级在线| 制服.丝袜.亚洲.另类.中文| 秋霞电影一区二区| 久久久久久久久免费| 国产99精品国产| 中文字幕日本不卡| 欧美色大人视频| 麻豆国产一区二区| 国产欧美精品一区| 色综合夜色一区| 亚洲福利一区二区| 日韩免费高清电影| 国产农村妇女精品| 成人黄色a**站在线观看| 日韩欧美一区二区久久婷婷| 国产一区999| 亚洲国产精品成人综合色在线婷婷| 国产福利一区二区| 欧美国产欧美综合| 色婷婷国产精品综合在线观看| 性欧美疯狂xxxxbbbb| 精品久久免费看| 99久久免费精品| 日韩精品国产欧美| 欧美国产国产综合| 欧美精品乱码久久久久久按摩| 国产在线一区观看| 一区二区三区四区乱视频| 91精品国产综合久久小美女| 成人免费高清视频在线观看| 亚洲成人三级小说| 欧美国产日韩一二三区| 67194成人在线观看| 成人高清av在线| 免费看日韩精品| 亚洲日本在线天堂| 国产欧美中文在线| 欧美二区乱c少妇| 97久久精品人人做人人爽| 午夜伦欧美伦电影理论片| 久久久噜噜噜久噜久久综合| 欧美日韩一区国产| 色综合色综合色综合| 日韩和欧美的一区| 亚洲国产中文字幕在线视频综合| 精品国产免费一区二区三区香蕉 | 日本高清视频一区二区| 懂色一区二区三区免费观看| 日韩不卡一区二区三区| 亚洲日本护士毛茸茸| 国产无人区一区二区三区| 欧美一级黄色大片| 欧美精品第1页| 色丁香久综合在线久综合在线观看| 国产成人av一区二区三区在线观看| 天天操天天色综合| 午夜免费久久看| 午夜婷婷国产麻豆精品| 亚洲一区二区不卡免费| 亚洲黄色片在线观看| 有码一区二区三区| 一区二区三区产品免费精品久久75| 综合久久国产九一剧情麻豆| 99久久99久久精品免费观看| 成人综合婷婷国产精品久久免费| 蓝色福利精品导航| 精品一区二区三区视频| 美女视频网站黄色亚洲| 亚洲成a天堂v人片| 亚洲自拍偷拍网站| 丝袜诱惑制服诱惑色一区在线观看| 亚洲成人黄色小说| 天堂资源在线中文精品| 久久99最新地址| 国产一区福利在线| 丰满放荡岳乱妇91ww| av亚洲精华国产精华精华| 91丨porny丨首页| 欧美四级电影网| 5月丁香婷婷综合| 久久精品亚洲乱码伦伦中文 | 精品国产乱码久久久久久免费 | 成人一级黄色片| 色婷婷国产精品| 欧美日韩国产天堂| 欧美va在线播放| 国产精品久久久久久久浪潮网站 | 成人国产视频在线观看| 色婷婷综合久久久中文一区二区| 在线观看中文字幕不卡| 欧美zozozo| 亚洲女厕所小便bbb| 美女一区二区在线观看| 国产成人av网站| 欧美午夜片在线看| 久久久久国产精品麻豆ai换脸| 亚洲视频在线观看一区| 久草中文综合在线| 欧美丝袜丝交足nylons| xvideos.蜜桃一区二区| 精品久久一二三区| 亚洲精品一二三区| 国产一区二区在线免费观看| 在线亚洲免费视频| 国产欧美日韩综合精品一区二区| 亚洲欧美电影一区二区| 捆绑紧缚一区二区三区视频| 91亚洲精华国产精华精华液| 在线免费不卡视频| 久久久亚洲午夜电影| 亚洲天堂网中文字| 精品一区二区在线观看| 欧美日韩色综合| 久久久99精品免费观看不卡| 国产精品久久三| 婷婷综合五月天| 久久99精品网久久| 欧美亚洲国产一卡| 久久久亚洲高清| 欧美极品aⅴ影院| 日韩电影在线一区| 成人综合激情网| 99久久免费国产| 欧美精品一区二区三区蜜桃视频 | 91福利小视频| 国产精品久久久久久久久免费樱桃 | 亚洲欧洲国产专区| 丁香啪啪综合成人亚洲小说| 精品欧美乱码久久久久久| 午夜激情综合网| 欧美性大战久久久| 亚洲女爱视频在线| 色综合欧美在线视频区| 亚洲欧美成aⅴ人在线观看| 99久精品国产| 亚洲男女一区二区三区| 一本大道久久a久久综合婷婷| 亚洲欧洲成人精品av97| 成人av在线一区二区三区| 国产精品入口麻豆原神| 国产1区2区3区精品美女| 久久久亚洲精华液精华液精华液| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产一区二区三区免费观看| 色8久久人人97超碰香蕉987| 亚洲狠狠丁香婷婷综合久久久| 99国产精品国产精品久久| 国产亚洲欧美激情| 激情六月婷婷久久| 欧美老肥妇做.爰bbww| 日韩专区在线视频| 欧美成人三级电影在线| 色综合中文字幕| 国产乱国产乱300精品| 三级一区在线视频先锋| 136国产福利精品导航| 久久色成人在线| 欧美一级生活片| 在线欧美日韩国产| 色婷婷精品大视频在线蜜桃视频| 国产酒店精品激情| 韩国精品久久久| 麻豆一区二区在线|