SQLServer 命令批量删除数据库中指定表(游标循环删除)

时间:2022-08-18 00:33:12

DECLARE @tablename VARCHAR(30),
@sql VARCHAR(500)
DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ONLY FOR
SELECT name FROM sysobjects WHERE name LIKE 'PUB%' AND type='U'
OPEN cur_delete_table
FETCH NEXT FROM cur_delete_table INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql='delete from  '+@tablename
EXEC (@sql)
FETCH NEXT FROM cur_delete_table INTO @tablename
END
CLOSE cur_delete_table
DEALLOCATE cur_delete_table

 

================================================

 

有时候我们需要清空数据库中所有用户表的数据,如果一张表一张表的清空的话,遇到一个庞大的数据系统估计得崩溃了. 用游标加上用变量来引用表名就可以做到这一点. 用变量来引用表名对表操作可以用在存储过程中,根据需要动太选择引用某个表的数据或对其操作 

//定义游标 DECLARE tables_cursor CURSOR

    FOR

    SELECT name FROM sysobjects WHERE type = 'U' //选择用户表名

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 //关闭游标  

 

例如:

CREATE proc ClearAllUserTable
as
begin
DECLARE tables_cursor CURSOR
    FOR
    SELECT name FROM sysobjects WHERE type = 'U' 
OPEN tables_cursor
DECLARE @tablename sysname   
FETCH NEXT FROM tables_cursor INTO @tablename   
WHILE (@@FETCH_STATUS <> -1) 
BEGIN
  --print   @tablename
   EXEC ('TRUNCATE TABLE ' + @tablename)      
   FETCH NEXT FROM tables_cursor INTO @tablename 
END
DEALLOCATE tables_cursor
end;
GO

======================================================================

SQLSERVER批量删除数据库中的表,存储过程,触发器

 

MSSQL批量删除数据库中的表或者存储过程

 

先在系统表中找到要处理的表名或者是存储过程的名字,在用游标对其进行处理
注意  sysobjects.xtype的值不同 删除命令是不同的如删除存储过程用drop PROCEDURE PROCEDURENAME 删除表用 drop table  tablename  sysobjects.xtype的值表示的意思如下表:
C:检查约束。
D:默认的约束
F:外键约束
L:日志
P:存储过程
PK:主键约束
RF:复制过滤存储过程
S:系统表格
TR:触发器
U:用于表格。
UQ:独特的约束。
批量处理的代码如下:
DECLARE cursorname cursor for select 'drop PROCEDURE  '+name from sysobjects where name like 'xx%' and xtype = 'p' --删除对应的存储过程
DECLARE cursorname cursor for select 'drop table  '+name from sysobjects where name like 'xx%' and xtype = 'u' --删除对应的表
open cursorname
declare @curname sysname
fetch next from cursorname into @curname
while(@@fetch_status=0)
  begin
 exec(@curname)
fetch next from cursorname into @curname
end
close cursorname
deallocate cursorname