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

摘要:
D: 默认约束F:外键约束L:日志P:存储过程PK:主键约束RF:复制筛选器存储过程S:系统表TR:触发器U:用于表。

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

免责声明:文章转载自《SQLServer 命令批量删除数据库中指定表(游标循环删除)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ELK从5.6.3升级到6.3.0总结shell 中的for、while循环及if语句下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#使用SqlSugar操作数据库导致的问题:托管调试助手“FatalExecutionEngineError”:运行时遇到了 错误。此错误的地址为。。。。

使用SqlSugar操作数据一定要注意: 对象的属性类型和数据库的字段类型要保持一致 对象的属性类型和数据库的字段类型要保持一致 对象的属性类型和数据库的字段类型要保持一致 本人基础太差了,这个小问题我从下午2点一致排错了23:00,终于解决了。 1,SqlSugar操作数据的代码 public class TighteningResultServi...

如何在eclipse开发环境中连接数据库?oracle和db2

1、使用连接工具:eclipse-》window-》open perspective-》myeclipse database explorer 2、下图是oracle连接driver设置,需要添加两个jar包,分别是oracle.jar和ojdbc14.jar 3、下图是db2连接driver设置,需要添加两个jar包,分别是db2jcc.jar和db2...

MongoDB在linux下的启动

     最近公司数据库用到MongoDB,而之前只关注知道它是分布式非关系数据库,数据以文档的形式存储,数据格式是类似json的bson格式.而对于具体用法以及java如何调用并没有过多接触,今天花费一天的时间了解了MongoDB在linux下的安装以及基本的命令行调用.    1. Linux下安装MongoDB     进入官网: https://d...

centos7之zabbix监控mysql(mariadb)数据库

一、Zabbix3.2.6使用自带模板监控MySQL  添加zabbix_agent客户端方法:http://www.cnblogs.com/lei0213/p/8858269.html mysql服务器端配置 1、需知:   1、如果要监控mysql或者mariadb数据库的话,首先你得保证这台服务器的正常运行,所以首先需要监控这台linux服务器,如果...

xampp默认mysql数据库root密码的修改

因为安装xampp后的mysql默认用户root的密码为空,而比如部署Testlink时需要提供数据库密码,此时就需要给root设定密码(网上有些方法,大同小异,但是可能都未标明关键点,未一些出上手的童鞋造成了不成功)。 如下介绍两个方法: 方法一:通过phpmyadmin xampp也是通过phpmyadmin管理的,所以我们能登录到phpmyad...

MySQL常用操作笔记[转]

一、用户创建、权限、删除1、连接MySql操作连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车)终端输入mysql -h 127.0.0.1 -u root -p 然后输入密码。就可以连接到本地的MySql数据库了。 2、 创建用户:命令: CREATE USER 'us...