最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年10月01日 11:57:59   作者:張工502219048  
這篇文章主要介紹了sql server編寫archive通用模板腳本實(shí)現(xiàn)自動(dòng)分批刪除數(shù)據(jù),需要的朋友可以參考下

博主做過(guò)比較多項(xiàng)目的archive腳本編寫,對(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的改寫,這樣的話,原來(lái)的刪除一個(gè)表用一個(gè)語(yǔ)句,就可能變成幾十行,如果archive的表有十幾個(gè)甚至幾十個(gè),那我們的腳本篇幅就非常大了,增加了開(kāi)發(fā)和維護(hù)的成本,不利于經(jīng)驗(yàn)比較少的新入職同事去開(kāi)發(fā)archive腳本,也容易把注意力分散到所謂分批邏輯中。

  根據(jù)這種情況,本周博主(zhang502219048)剛好在工作過(guò)程中,總結(jié)并編寫了一個(gè)自動(dòng)分批刪除數(shù)據(jù)的模板,模板固定不變,只需要把注意力集中放在delete語(yǔ)句中,并且可以在delete語(yǔ)句中控制每批刪除的數(shù)據(jù)量,比較方便,通過(guò)變量組裝模板sql,避免每個(gè)表就單獨(dú)寫一個(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ù)腳本中自行編寫
, @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

總結(jié)

以上所述是小編給大家介紹的sql server編寫archive通用模板腳本實(shí)現(xiàn)自動(dòng)分批刪除數(shù)據(jù),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • SQL?SERVER常用的日期與時(shí)間查詢總結(jié)

    SQL?SERVER常用的日期與時(shí)間查詢總結(jié)

    這篇文章介紹了SQL?SERVER常用日期與時(shí)間查詢的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • SQL?Server?字段設(shè)自增的實(shí)現(xiàn)流程

    SQL?Server?字段設(shè)自增的實(shí)現(xiàn)流程

    這篇文章主要介紹了SQL?Server?字段設(shè)自增的實(shí)現(xiàn)方法,在本文中,我將先向你展示整個(gè)實(shí)現(xiàn)的流程,然后逐步解釋每個(gè)步驟需要做什么,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2023-12-12
  • SQL Server 2016 查詢存儲(chǔ)性能優(yōu)化小結(jié)

    SQL Server 2016 查詢存儲(chǔ)性能優(yōu)化小結(jié)

    SQL Server 2016已經(jīng)發(fā)布了有半年多,相信還有很多小伙伴還沒(méi)有開(kāi)始使用,今天我們來(lái)談?wù)凷QL Server 2016 查詢存儲(chǔ)性能優(yōu)化,希望大家能夠喜歡
    2016-01-01
  • SQL SERVER數(shù)據(jù)操作類代碼

    SQL SERVER數(shù)據(jù)操作類代碼

    跟大家分享個(gè)SQL Server數(shù)據(jù)操作類,主要是操作數(shù)據(jù)庫(kù)有關(guān)。請(qǐng)做適當(dāng)修改
    2012-06-06
  • 安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法

    安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法

    這篇文章主要介紹了安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法,需要的朋友可以參考下
    2015-01-01
  • SQLserver刪除某數(shù)據(jù)庫(kù)中所有表實(shí)現(xiàn)思路

    SQLserver刪除某數(shù)據(jù)庫(kù)中所有表實(shí)現(xiàn)思路

    方便刪除數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)表,清空數(shù)據(jù)庫(kù),有些有約束,不能直接delete,因?yàn)槟菢犹kU(xiǎn)了所以需要先刪除庫(kù)中的約束,接下來(lái)提供詳細(xì)實(shí)現(xiàn)代碼,感興趣的你可以參考下哦,或許對(duì)你學(xué)習(xí)有所幫助
    2013-02-02
  • SQL Server中的文件和文件組介紹

    SQL Server中的文件和文件組介紹

    這篇文章介紹了SQL Server中的文件和文件組,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • sqlserver主鍵自增的實(shí)現(xiàn)示例

    sqlserver主鍵自增的實(shí)現(xiàn)示例

    這篇文章主要介紹了sqlserver主鍵自增的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SQL?Server?2022?AlwaysOn新特性之包含可用性組詳解

    SQL?Server?2022?AlwaysOn新特性之包含可用性組詳解

    這篇文章主要介紹了SQL?Server?2022?AlwaysOn新特性之包含可用性組介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • SQL?server創(chuàng)建存儲(chǔ)過(guò)程詳細(xì)圖文教程

    SQL?server創(chuàng)建存儲(chǔ)過(guò)程詳細(xì)圖文教程

    在SQL中存儲(chǔ)過(guò)程類似于編程語(yǔ)言的函數(shù),即當(dāng)創(chuàng)建一個(gè)存儲(chǔ)過(guò)程之后便可以在接下來(lái)任何類似的操作是直接調(diào)用存儲(chǔ)過(guò)程,下面這篇文章主要給大家介紹了關(guān)于SQL?server創(chuàng)建存儲(chǔ)過(guò)程的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

广水市| 双江| 乐都县| 彝良县| 扶沟县| 胶南市| 阳江市| 临江市| 原平市| 成都市| 多伦县| 望城县| 岐山县| 金门县| 公主岭市| 徐闻县| 龙里县| 塘沽区| 常州市| 大余县| 安溪县| 行唐县| 广水市| 贡山| 富川| 苗栗市| 白水县| 晋宁县| 清徐县| 读书| 伊金霍洛旗| 星子县| 梁河县| 安义县| 雷山县| 东平县| 英超| 阿城市| 项城市| 忻州市| 凌海市|