日期:2014-05-17  浏览次数:20447 次

如何实现批量删除相似表名中的数据
例如数据库中存在tmp_1001  tmp_1002 tmp_1003 ..... tmp_1203 
等名字的表

如何实现将所有表名为”tmp_“ 开头的表 中的数据都删除


--得到所有的表名
declare @sql varchar(8000)
select 'DELETE FROM ' + NAME FROM SYSOBJECTS WHERE XTYPE='U' AND NAME LIKE 'TMP_%'
--这样可以一下得出所有要删除的语句 如何执行啊 准备做成JOB 自动来删除



------解决方案--------------------
--得到所有的表名
declare @sql varchar(8000)
set @sql =''
select @sql+= 'DELETE FROM ' + NAME +'    ' + char(13) 
FROM SYSOBJECTS WHERE XTYPE='U' AND NAME LIKE 'TMP_%'
--这样可以一下得出所有要删除的语句 如何执行啊 准备做成JOB 自动来删除
print (@sql) 

这条语句可以把SQL拼出来如果没问题你就Exec (@sql)就可以了
------解决方案--------------------
DECLARE @sql VARCHAR(MAX) = ''
SELECT @sql = @sql + 'DELETE FROM ' + NAME + CHAR(10) FROM SYS.TABLES 
PRINT @sql
EXEC(@sql)

------解决方案--------------------
DECLARE @sql VARCHAR(MAX) = ''
SELECT @sql = @sql + 'DELETE FROM ' + NAME + CHAR(10) FROM SYS.TABLES  WHERE  CHARINDEX('tmp',NAME) > 0
PRINT @sql
EXEC(@sql)
------解决方案--------------------
try this,

declare @tsql varchar(6000),@tabname varchar(200)

declare ap scroll cursor for
  select name from sys.tables where name like 'tmp[_]%'

open ap
fetch first from ap into @tabname

while(@@fetch_status<>-1)
begin
  select @tsql='truncate table '+@tabname
  exec(@tsql)
  fetch next from ap into @tabname
end

close ap
deallocate ap

------解决方案--------------------