批量删除存储过程和批量修改存储过程
修改:
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