真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

sqlserver中怎么實(shí)現(xiàn)自動(dòng)分批刪除數(shù)據(jù)

這篇文章給大家介紹sql server中怎么實(shí)現(xiàn)自動(dòng)分批刪除數(shù)據(jù),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有下城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

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

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

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

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

-- ===== 1 分批archive模板 =======================================================--【請(qǐng)不要修改本模板內(nèi)容】/* 說(shuō)明:1. 組裝的archive語(yǔ)句為:@sql = @sql_Part1 + @sql_Del + @sql_Part22. 組裝的參數(shù)@parameters為:@parameters = @parameters_Base + 自定義參數(shù)3. 傳入?yún)?shù):@strStepInfo 需要print的step信息4. archive邏輯專(zhuān)注于@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ù)@@ROWCOUNTprint convert(varchar(50), getdate(), 121) + @strStepInfowhile @iRowCount <> 0begin  print ''begin batch:''  print @iBatch  print convert(varchar(50), getdate(), 121)  begin try    begin tran', @sql_Del nvarchar(max) = '' --@sql_Del腳本需要根據(jù)實(shí)際情況在后續(xù)腳本中自行編寫(xiě), @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'' --延時(shí)  print convert(varchar(50), getdate(), 121)  print ''end batch''  select @iBatch = @iBatch + 1end'-- ===== 2 demo1(delete語(yǔ)句不含參數(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_Part2print @sqlexec sp_executesql @sql, @parameters, N' 2 archive 表A'-- ===== 3 demo2(delete語(yǔ)句含參數(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_Part2print @sqlexec sp_executesql @sql, @parameters, N' 3 archive 表B', @ArchiveDate

關(guān)于sql server中怎么實(shí)現(xiàn)自動(dòng)分批刪除數(shù)據(jù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文標(biāo)題:sqlserver中怎么實(shí)現(xiàn)自動(dòng)分批刪除數(shù)據(jù)
路徑分享:http://weahome.cn/article/piighj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部