MSSQL批量删除数据库指定表

作者:翅膀的初衷 来源:本站原创 发布时间:2014-09-23 查看数:33763

有时候因为一些原因,需要批量删除数据库的表,如果手动一个一个的删就太麻烦了,假如表之间还存在主外键,这绝对是苦差事,不过没有关系,我们可以自己写个游标,先批量清除外键,再删除所有表。

DECLARE    @name varchar(200) 
SET @name='t_dev_%' 

DECLARE sql_cursor CURSOR 
FOR 
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; ' from sysobjects where xtype = 'F' and object_name(parent_obj) like @name 

OPEN sql_cursor 
DECLARE @sqlstr sysname 
FETCH NEXT FROM sql_cursor INTO @sqlstr 
WHILE (@@FETCH_STATUS <> -1) 
BEGIN 
exec (@sqlstr) 
FETCH NEXT FROM sql_cursor INTO @sqlstr 
END 
DEALLOCATE sql_cursor 

DECLARE tables_cursor CURSOR 
FOR 
select [name] from sysobjects where xtype='u' and name like @name 
OPEN tables_cursor 
DECLARE @tablename sysname 
FETCH NEXT FROM tables_cursor INTO @tablename 
WHILE (@@FETCH_STATUS <> -1) 
BEGIN 
exec ('drop table '+@tablename) 
FETCH NEXT FROM tables_cursor INTO @tablename 
END 
DEALLOCATE tables_cursor

如果你只是想清除表中所有数据的话,把DROP TABLE这里改成TRUNCATE TABLE即可。

DECLARE    @name varchar(200) 
SET @name='t_dev_%' 

DECLARE tables_cursor CURSOR 
FOR 
select [name] from sysobjects where xtype='u' and name like @name 
OPEN tables_cursor 
DECLARE @tablename sysname 
FETCH NEXT FROM tables_cursor INTO @tablename 
WHILE (@@FETCH_STATUS <> -1) 
BEGIN 
exec ('TRUNCATE TABLE '+@tablename) 
FETCH NEXT FROM tables_cursor INTO @tablename 
END 
DEALLOCATE tables_cursor