首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-08-16 
如何实现批量删除相似表名中的数据例如数据库中存在tmp_1001tmp_1002 tmp_1003 ..... tmp_1203 等名字的表

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

热点排行