联系我们 更多>>
  • 地址:西安经济技术开发区中环大厦A座18F-A
  • 电话:029-83765753
  • Q Q:374676511
当前位置:首页 >> SQL Server >> 正文

批量更改数据库所有者的对象

来源:网络来源 时间:2010-05-14 点击:
--功能说明:批量更改数据库所有者的对象
--用法:exec ChangeObjectOwner ’nmkspro’,’dbo’
--即可将所有nmkspro所有者的对象改为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

---
如果将一个表所有者改为dbo,只需  
  sp_changeobjectowner   '表名','dbo'即可  
  要将所有的表的所有者都改为dbo,可以用循环处理,此处略  
  其实用SQL的系统存储过程sp_MSForEachTable可以轻松搞定  
  只需exec   sp_MSForEachTable   'sp_changeobjectowner   ''?'',   ''dbo'''  


/*附加数据库修改所有者*/
企业管理器  >  服务器设置  >  允许对系统目录直接进行修改
delete from sysusers where name='附加上来的原有用户名'
企业管理器  > 安全性  >  添加/编辑用户拥有数据库的所有者权限