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

          軟件下載吧

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

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

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

          博主做過(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)論或私信咨詢博主。

          — ===== 1 分批archive模板 =======================================================
          –【請(qǐng)不要修改本模板內(nèi)容】
          /*
          說(shuō)明:
          1. 組裝的archive語(yǔ)句為:@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ù)腳本中自行編寫(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 + 1
          end’
          — ===== 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_Part2
          print @sql
          exec 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_Part2
          print @sql
          exec sp_executesql @sql, @parameters, N’ 3 archive 表B’, @ArchiveDate

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

          相關(guān)下載

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

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

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

          熱門閱覽

          最新排行

          公眾號(hào)

          主站蜘蛛池模板: 无码喷水一区二区浪潮AV| 91精品一区二区| 日韩精品福利视频一区二区三区| 久久er99热精品一区二区| 性无码免费一区二区三区在线| 亚洲AV噜噜一区二区三区| 中文字幕一区日韩在线视频| 欧美日本精品一区二区三区| 无码毛片视频一区二区本码| 国产成人AV区一区二区三| 精品无码人妻一区二区免费蜜桃 | 色婷婷香蕉在线一区二区| 精品亚洲一区二区| 精品无码人妻一区二区三区不卡| 手机福利视频一区二区| 日韩免费一区二区三区在线播放| 久久久国产一区二区三区| 国产亚洲福利一区二区免费看 | 国产一区二区三区小向美奈子| 国产99视频精品一区| 人妻aⅴ无码一区二区三区| 久久亚洲国产精品一区二区| 亚洲福利视频一区二区| 一区二区三区在线观看视频| 美女福利视频一区二区| 国产精品亚洲一区二区三区| 成人免费视频一区二区三区| 四虎成人精品一区二区免费网站| 精品一区二区三区| 欧洲精品一区二区三区在线观看 | 人妻无码一区二区视频| 视频一区在线免费观看| 一区二区在线视频免费观看| 久久精品人妻一区二区三区| 国偷自产一区二区免费视频| 色噜噜AV亚洲色一区二区| 无码少妇一区二区性色AV| 亚洲AV无码一区二区三区在线 | 国模精品一区二区三区视频| 日韩国产一区二区| 寂寞一区在线观看|