当前位置:数据库 > SQLServer >>

批量删除存储过程和批量修改存储过程

批量删除存储过程和批量修改存储过程
修改:

declare proccur cursor
    for
    select [name] from sysobjects where name like 'Foods_%'
declare @procname varchar(100)
declare @temp varchar(100)
open proccur
fetch next from proccur into @procname
while(@@FETCH_STATUS = 0)
begin  
    set @temp='kcb_'+@procname
    EXEC SP_RENAME @procname,@temp
  
    print(@procname + '已被删除')
    fetch next from proccur into @procname
end
close proccur
deallocate proccur

详细实例

批量修改表的所有者:  

EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ''?'',''dbo''   '  
单个修改表所有者:  
exec   sp_changeobjectowner   '要改的表名','dbo' 

批量修改存储过程的存储过程:

CREATE   PROCEDURE   ChangeProcOwner       @OldOwner as   NVARCHAR(128),--参数原所有者       @NewOwner as   NVARCHAR(128)--参数新所有者       AS             DECLARE   @Name   as   NVARCHAR(128)         DECLARE   @Owner as   NVARCHAR(128)       DECLARE   @OwnerName as   NVARCHAR(128)             DECLARE   curObject   CURSOR   FOR         select 'Name' =   name,       'Owner' =   user_name(uid)       from   sysobjects       where   user_name(uid)=@OldOwner   and   xtype='p'       order   by   name             OPEN     curObject       FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner       WHILE(@@FETCH_STATUS=0)       BEGIN               if   @Owner=@OldOwner         begin       set   @OwnerName   =   @OldOwner   +   '.'   +   rtrim(@Name)       exec   sp_changeobjectowner   @OwnerName,   @NewOwner       end             FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner       END             close   curObject       deallocate   curObject       GO  执行 exec   ChangeProcOwner   'xx','dbo'
或者
exec   ChangeProcOwner   '?','dbo'

还有一种方法:

--如果一个数据库教程中(表和存储过程)有多个用户名,而要把它所有都改成dbo 就可以用如下的语句

Select 'sp_changeobjectowner ''' + User_Name(Uid) + '.' + name + ''',''dbo'' ' From sysobjects Where Uid Not in (User_ID('dbo')) And Type In ('U','P')

删除:

先看单删除的

sqlserver 2005一次只能删除一个存储过程,如果多了,需要很长时间才能删完,所以写了一段语句,直接就把当然数据库下所有用户自定义的存储过程给drop了。不过使用都请留心,当前打开的数据库哦。下面贴代码

declare proccur cursor
    for
        select [name] from sysobjects where type='P'
declare @procname varchar(100)
open proccur
fetch next from proccur into @procname
while(@@FETCH_STATUS = 0)
begin  
    --exec('drop proc ' + @procname)  --本句被注释,使用时请取消

    print(@procname + '已被删除')
    fetch next from proccur into @procname
end
close proccur
deallocate proccur

 

再看批量删除存储过程

declare proccur cursor
    for
    select [name] from sysobjects where name like 'Users_%'
declare @procname varchar(100)
open proccur
fetch next from proccur into @procname
while(@@FETCH_STATUS = 0)
begin  
    exec('drop proc ' + @procname)
    print(@procname + '已被删除')
    fetch next from proccur into @procname
end
close proccur
deallocate proccur

补充:数据库,Mssql
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,