SQL迴圈清除表資料,sql迴圈
SQL迴圈執行清除表資料語句
最近項目經常需要清庫測試 但是一個個 truncate 很慢 浪費時間 所以寫了個 sql批量清除表資料 這樣方便下次使用 靈活性也很高 語句不僅可以 用來清除資料 也可以 批量update delete等
邏輯:
根據 字元拆分 字串 擷取每次執行語句的 表名
根據 split 擷取字串內有多少個表 也就是迴圈的次數
每次迴圈 先擷取本次 執行語句的表名 執行語句 然後再substring下 去除這次執行過的表名 直到迴圈結束
--定義--declare @i int --迴圈變數declare @length int --迴圈次數declare @tableList varchar(Max) --需要迴圈的表字串declare @split varchar(Max) --分割字串字元declare @tableName varchar(Max) --執行語句的表名
--初始--set @i=0set @tableList='ATable,BTable,CTable 'set @split=','set @tableList=ltrim(rtrim(@tableList)) --清除字串 左右空格set @length=(select len(@tableList)-len(REPLACE(@tableList,@split,''))) --計算需要迴圈的次數
一開始寫時 執行語句那裡 直接寫 truncate table @tableName
這樣肯定不行的 因為@tableName是 varchar類型的變數 執行的時候相當於 truncate table ‘表名’ 所以報錯 然後用了exec() 動態執行語句
while(@i<@length+1) --迴圈語句beginif(charindex(@split,@tableList)=0) --判斷是否只有一張表beginset @tableName=@tableListendelsebegin set @tableName=substring(@tableList,0,charindex(@split,@tableList)) --截取 字串中從開始到第一個@split的字元 擷取表名endexec('truncate table '+@tableName) --執行語句set @tableList=substring(@tableList,charindex(@split,@tableList)+1,len(@tableList)) --去除已經執行過的表名 set @i=@i+1end