zoukankan      html  css  js  c++  java
  • SQLServer 命令批量删除数据库中指定表(游标循环删除)

    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

  • 相关阅读:
    apache安全—用户访问控制
    hdu 3232 Crossing Rivers 过河(数学期望)
    HDU 5418 Victor and World (可重复走的TSP问题,状压dp)
    UVA 11020 Efficient Solutions (BST,Splay树)
    UVA 11922 Permutation Transformer (Splay树)
    HYSBZ 1208 宠物收养所 (Splay树)
    HYSBZ 1503 郁闷的出纳员 (Splay树)
    HDU 5416 CRB and Tree (技巧)
    HDU 5414 CRB and String (字符串,模拟)
    HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
  • 原文地址:https://www.cnblogs.com/neru/p/3591413.html
Copyright © 2011-2022 走看看