读书人

怎么实现批量删除相似表名中的数据

发布时间: 2013-08-16 14:29:57 作者: rapoo

如何实现批量删除相似表名中的数据
例如数据库中存在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

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


引用:
数据库里的tmp_1001 这样的表有300多个 如果是SQL2005 使用
Quote: 引用:

DECLARE @sql VARCHAR(MAX) = ''
SELECT @sql = @sql + 'DELETE FROM ' + NAME + CHAR(10) FROM SYS.TABLES WHERE CHARINDEX('tmp',NAME) > 0
PRINT @sql
EXEC(@sql)

的方法就没有问题
但是 sql2000 的话 使用 declare @sql varchar(8000)
有这样的情况

DELETE FROM tmp_1251
DELETE FROM tmp_1252
DELETE FROM tmp_1253
DE


你可以用游标呀,像7楼给出的语句
你也可以把这print出来的125条先执行删除,多执行两次也可以删掉所有表

[解决办法]
本帖最后由 htl258 于 2013-07-27 08:47:04 编辑
用delete的方式
exec sp_MSforeachtable 'Delete from ? where object_name(object_id(''?'')) like ''%tmp[_]%'''

用truncate的方式
exec sp_MSforeachtable 'if object_name(object_id(''?'')) like ''%tmp[_]%'' truncate table ?'

读书人网 >SQL Server

热点推荐