日韩小视频-日韩久久一区二区三区-日韩久久一级毛片-日韩久久久精品中文字幕-国产精品亚洲精品影院-国产精品亚洲欧美云霸高清

下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫 > MS_SQL > SQL開發(fā)知識(shí):SQL Server 添加Delete操作回滾日志方式

SQL開發(fā)知識(shí):SQL Server 添加Delete操作回滾日志方式

時(shí)間:2024-02-05 12:47作者:下載吧人氣:13

我們?cè)诓僮鞅淼臅r(shí)候難免會(huì)遇到誤刪除,或者刪掉的數(shù)據(jù)還想恢復(fù)的情況。

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

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

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

下面這段sql粘過去直接運(yùn)行,建立一個(gè)存儲(chǔ)過程:

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

標(biāo)簽MSSQL,SQLServer,技術(shù)文檔,數(shù)據(jù)庫,SQLSERVER

相關(guān)下載

查看所有評(píng)論+

網(wǎng)友評(píng)論

網(wǎng)友
您的評(píng)論需要經(jīng)過審核才能顯示

熱門閱覽

最新排行

公眾號(hào)

主站蜘蛛池模板: 欧美hdvideosex4k| 福利91| 国产成人综合手机在线播放 | 泰国情欲片寂寞的寡妇在线观看 | 亚洲国产欧美国产综合一区 | 国产精品路边足疗店按摩 | 国内自拍视频一区二区三区 | 亚洲另类视频在线观看 | 一级毛片视频免费观看 | 欧美人成毛片在线播放 | 国产一级aaaaa毛片欧美 | 高清在线一区二区 | 久久国产精品久久 | 草草影院ccyycom浮力影院 | 国产日韩免费 | 国产精品免费久久久免费 | 亚洲加勒比久久88色综合 | 国产三级久久久精品三级 | 中文字幕在线观看91 | 精品videosex性欧美 | 偷偷久久 | 欧美一区=区三区 | 成人免费视频在线 | 国产黄a三级三级看三级 | 久久91精品国产99久久yfo | 久久爽久久爽久久免费观看 | 大学生一级一片第一次欧美 | 高清三级毛片 | 久久精品一区二区三区日韩 | 手机在线视频一区 | 日本三级全黄三级a | 一本大道香蕉大vr在线吗视频 | 亚洲第一视频在线播放 | 美国美女一级毛片免费全 | 亚洲精品久久一区二区无卡 | 欧美成人香蕉网在线观看 | 91精品久久国产青草 | 久久成人性色生活片 | 国产三级午夜理伦三级 | 欧美一级在线观看视频 | 性感美女香蕉视频 |