更新数据库中表、存储过程或者所有对象的所有者

--更新数据库中所有表的所有者
exec sp_msforeachtable 'sp_changeobjectowner ''?'',''dbo'''

--更新数据库中所有对象的所有者
CREATE   PROCEDURE dbo.ChangeObjectOwner
@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
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


--更新数据库中存储过程的所有者
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 'User','dbo' 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值