--更改某个表
exec sp_changeobjectowner 'tablename','dbo'
--更改全部表,使用存储过程
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@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
select @name,@NewOwner,@OldOwner --输出更改了哪些表的用户
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
注意:sp_changeobjectowner 会删除对象中的所有现有权限。在运行 sp_changeobjectowner 之后,必须重新应用要保留的任何权限。因此,建议首先编写现有权限的脚本,然后再运行 sp_changeobjectowner。更改了对象的所有权之后,便可使用该脚本重新应用权限。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18995771/viewspace-722969/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/18995771/viewspace-722969/