--修改所有用戶表/存儲過程/視圖/觸發器/自定義函數的所有者爲dbo,則用遊標(不要理會錯誤提示)
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
批量修改:
EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '
單個修改:
exec sp_changeobjectowner '要改的表名','dbo'
只有所有者才能更改表的所有者
示例
下面的示例使用戶 Albert 成爲當前數據庫的所有者,並將舊數據庫所有者的現有別名映射到 Albert。
EXEC sp_changedbowner 'Albert'
執行了EXEC sp_changedbowner 'Albert' 也沒有反映
用了EXEC sp_changeobjectowner 'authors', 'Corporate/GeorgeW'
這是孤立用戶
USE aaa
go
EXEC sp_change_users_login 'Auto_Fix', 'aaa', NULL, 'password'
go