批量删除表和存储过程

      我是个不愿动脑子的人,要不是要删除表和存储过程太多,我就一个一个删了,可这次真没辙,实在太多了(其实我想把整个库全删来着,然后再把SQL语句执行一遍),可是由于还没有使用过游标,所以利用这次机会把游标练练.

      废话少说,我使用游标来实现批量删除,实现的过程参考了小强(占卜师)的例子,然后结合实际情况实现了表和存储过程的批量删除

     

USE JBlogSite
DECLARE Del_Cursor CURSOR
FOR
SELECT 'DROP PROCEDURE ' + name from dbo.sysobjects WHERE OBJECTPROPERTY(id, N'IsProcedure'= 1 AND name not like 'USP_Blog%'
OPEN Del_Cursor
DECLARE @curname sysname
FETCH NEXT FROM Del_Cursor into @curname
WHILE(@@fetch_status=0)
  
BEGIN
  
EXEC(@curname)
  
FETCH NEXT FROM Del_Cursor into @curname
  
END
CLOSE Del_Cursor
DEALLOCATE Del_Cursor

       

       由于我也是第一次使用游标,为了巩固,我再结合该例,说明一下游标的创建过程:

       第一行:说明使用那个库,我在测试的时候采用JBlogSite;

       第二行:声明游标,游标的名字是Del_Cursor,标准声明是这样:

         DECLARE  cursor_name [INSENSITIVE] [SCROLL] CURSOR

         FOR  select_statement

         [FOR {READ ONLY} | {UPDATE} [OF column_name] [, ...n]]

       其中:

        cursor:游标名称;

        INSENSITIVE:告诉DBMS制作查询结果集数据的临时副本,而不是使用指针指向数据库表中真实数据行的列.

        SCROLL :指定所有的提取选项(FIRST,LAST,PRIOR,NEXT,RELATIVE,ABSOLUTE)均可用

        select_statement:查询表达式

        READ ONLY:禁止通过该游标进行更新

        UPDATE [OF columns_name [,...]]:可以更新的列名,如果写出UPDATE,则说明可以更新全部列

通过游标实现对每行的单独操作.由于是执行删除操作,所以代码第四行的WHERE 条件特别重要,由于我们在创建存储过程时, 对存储过程的命名都有一定的规则,所以再删除的时候也比较好删除.

原文地址:https://www.cnblogs.com/jjhe369/p/1255845.html