修改sqlserver数据库所有者
修改sqlserver数据库所有者一、单个表修改
exec sp_changeobjectowner '要改的表名','dbo'
例如
use test;
go
exec sp_changeobjectowner '[db_owner].[T1]','dbo';
二、批量修改数据库对象的所有者
如果一个数据库里面的表对象非常多,那么使用该方法就非常的繁琐了。此时就可以使用sp_MSforeachtable来批量处理该工作。
方法
use test;
go
exec sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '
但是使用sp_MSforeachtable结合系统存储过程sp_changeobjectowner,只能修改数据库里面所有表对象的所有者(owner)。并不能修改视图、存储过程、用户函数的所有者。
三、批量修改存储过程、视图、用户自定义函数的所有者
方法
declare tb cursor local for
select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].['
+replace(name,']',']]')+']'',''dbo'''
from sysobjects
where xtype in('U','V','P','TR','FN','IF','TF') and status>=0
open tb
declare @s nvarchar(4000)
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb
go
四、使用ALTER SCHEMA修改数据库对象的所有者
例如
ALTER SCHEMA dbo TRANSFER db_owner.T1;
五、使用sp_changeobjectowner需要注意的地方
在使用系统函数sp_changeobjectowner时,你都会收到一条提示信息“注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。”,这个是因为系统函数sp_changeobjectowner虽然会修改数据库对象的所有者,但是,在视图、存储过程、用户自定义函数里面,如果你使用了owner.object_name这种写法,系统函数并不能检测到。所以当数据库对象修改过后,就有可能导致部分视图、存储过程出现错误