zoukankan      html  css  js  c++  java
  • 游标批 量删除数据表

    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

  • 相关阅读:
    Mybatis学习01:利用mybatis查询数据库
    SpringBoot_登录注册
    python抓取中科院大学招聘
    centos7设置固定IP
    PIL给图片加水印
    You can ignore those files in your build.gradle
    mysql事件执行时间
    wampserver2.5域名解析错误问题
    Mysql错误消息 语言设置
    js控制select多选
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/13646624.html
Copyright © 2011-2022 走看看