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

軟件下載吧

當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫 > MS_SQL > 教你再sql server編寫archive通用模板腳本實(shí)現(xiàn)自動分批刪除數(shù)據(jù)

教你再sql server編寫archive通用模板腳本實(shí)現(xiàn)自動分批刪除數(shù)據(jù)

時間:2024-02-28 13:28作者:下載吧人氣:23

博主做過比較多項(xiàng)目的archive腳本編寫,對于這種刪除數(shù)據(jù)的腳本開發(fā),肯定是一開始的話用最簡單的一個delete語句,然后由于部分表數(shù)據(jù)量比較大啊,索引比較多啊,會發(fā)現(xiàn)刪除數(shù)據(jù)很慢而且影響系統(tǒng)的正常使用。然后就對delete語句進(jìn)行按均勻數(shù)據(jù)量分批delete的改寫,這樣的話,原來的刪除一個表用一個語句,就可能變成幾十行,如果archive的表有十幾個甚至幾十個,那我們的腳本篇幅就非常大了,增加了開發(fā)和維護(hù)的成本,不利于經(jīng)驗(yàn)比較少的新入職同事去開發(fā)archive腳本,也容易把注意力分散到所謂分批邏輯中。

  根據(jù)這種情況,本周博主(zhang502219048)剛好在工作過程中,總結(jié)并編寫了一個自動分批刪除數(shù)據(jù)的模板,模板固定不變,只需要把注意力集中放在delete語句中,并且可以在delete語句中控制每批刪除的數(shù)據(jù)量,比較方便,通過變量組裝模板sql,避免每個表就單獨(dú)寫一個分批邏輯的重復(fù)代碼,化簡為繁,增加分批刪除一個表指定數(shù)據(jù)的話只需要增加幾行代碼就可以(如下所示中的demo1和demo2)。

  demo1:不帶參數(shù),根據(jù)表tmp_Del刪除表A對應(yīng)ID的數(shù)據(jù)。

  demo2:帶參數(shù),根據(jù)Date字段是否過期刪除表B對應(yīng)數(shù)據(jù)。

  具體請參考下面的腳本和相關(guān)說明,如有不懂的地方歡迎評論或私信咨詢博主。

— ===== 1 分批archive模板 =======================================================
–【請不要修改本模板內(nèi)容】
/*
說明:
1. 組裝的archive語句為:@sql = @sql_Part1 + @sql_Del + @sql_Part2
2. 組裝的參數(shù)@parameters為:@parameters = @parameters_Base + 自定義參數(shù)
3. 傳入?yún)?shù):@strStepInfo 需要print的step信息
4. archive邏輯專注于@sql_Del,而非分散于分批。
*/
declare @parameters nvarchar(max) = ”
, @parameters_Base nvarchar(max) = N’@strStepInfo nvarchar(100)’
, @sql nvarchar(max) = ”
, @sql_Part1 nvarchar(max) = N’
declare @iBatch int = 1, –批次
@iRowCount int = -1 –刪除行數(shù),初始為-1,后面取每批刪除行數(shù)@@ROWCOUNT
print convert(varchar(50), getdate(), 121) + @strStepInfo
while @iRowCount <> 0
begin
print ”begin batch:”
print @iBatch
print convert(varchar(50), getdate(), 121)
begin try
begin tran

, @sql_Del nvarchar(max) = ‘
‘ –@sql_Del腳本需要根據(jù)實(shí)際情況在后續(xù)腳本中自行編寫
, @sql_Part2 nvarchar(max) = N’
select @iRowCount = @@rowcount
commit tran
end try
begin catch
rollback tran
print ”– Error Message:” + convert(varchar, error_line()) + ” | ” + error_message()
end catch
waitfor delay ”0:00:01” –延時
print convert(varchar(50), getdate(), 121)
print ”end batch”
select @iBatch = @iBatch + 1
end’
— ===== 2 demo1(delete語句不含參數(shù)):archive 表A =======================================================
select @parameters = @parameters_Base + ” –如果有需要增加自定義參數(shù),在這里加,例如@parameters = @parameters_Base + ‘, @ArchiveDate datetime’
, @sql_Del = ‘
delete top (50000) tc_Del
from 表A tc_Del
inner join tmp_Del cd on cd.ID = tc_Del.ID

select @sql = @sql_Part1 + @sql_Del + @sql_Part2
print @sql
exec sp_executesql @sql, @parameters, N’ 2 archive 表A’
— ===== 3 demo2(delete語句含參數(shù)):archive 表B =======================================================
select @parameters = @parameters_Base + ‘, @ArchiveDaate datetime’ –如果有需要增加自定義參數(shù),在這里加,例如@parameters = @parameters_Base + ‘, @ArchiveDate datetime’
, @sql_Del = ‘
delete top (50000)
from 表B
where Date < @ArchiveDate

select @sql = @sql_Part1 + @sql_Del + @sql_Part2
print @sql
exec sp_executesql @sql, @parameters, N’ 3 archive 表B’, @ArchiveDate

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

相關(guān)下載

查看所有評論+

網(wǎng)友評論

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

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 国产又粗又猛又大的视频| 欧日韩不卡在线视频| 小丑joker在线观看完整版高清 | xxxx俄罗斯大白屁股| 美女黄18以下禁止观看| 无码AV中文一区二区三区| 国产亚洲欧美日韩亚洲中文色| 久久精品国产亚洲AV高清热| 黄网站色视频免费观看45分钟| 最近中国日本免费观看| 国产成人精品亚洲一区| 久久精品国产亚洲夜色AV网站| 黄色网址在线免费| 日本电影中文字幕| 国产一区二区女内射| 中文字幕人妻无码一夲道| 绝美女神抬臀娇吟| 男生插入女生下面视频| 好男人好资源影视在线| 伊人久久大香线蕉综合AV| 99视频精品全国在线观看| 波多野结衣在线免费视频| 国产裸体舞一区二区三区 | 一级视频在线免费观看| 福利小视频在线观看| 在线视频一区二区三区在线播放 | 国产精品综合视频| 人妻少妇久久中文字幕| 99精产国品一二三产| 欧美性色黄在线视频| 国产日韩欧美不卡在线二区| 久久免费的精品国产V∧| 老司机精品免费视频| 日本在线观看一级高清片| 国产chinese中国hdxxxx| 一本一本久久a久久综合精品蜜桃 一本一本久久a久久综合精品蜜桃 | 成人Av无码一区二区三区| 免费无毒A网站在线观看| 91导航在线观看| 明星ai换脸资源在线播放| 国产精品亚洲一区二区三区|