SQLServer修改表全部者

當用sp_adduser 對數據庫進行添加用戶以後.卻出現了此對象 '表名' 無效的現象?

執行這個語句,就能夠把當前庫的全部表的全部者改成dbo
exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''

批量修改:將全部屬於 www_domain_com 的表換成 dbo
EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''www_domain_com'',''dbo'' '

單個修改:
exec sp_changeobjectowner '要改的表名','dbo'

在企業管理器裏.選擇該表----->設計表------>在至關屬性裏能夠更改表的全部者(變爲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

 

1. sp_changeobjectowner

更改當前數據庫中對象的全部者。

 

語法

sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

 

參數

[@objname =] 'object'

 

當前數據庫中現有的表、視圖或存儲過程的名稱。object 的數據類型爲 nvarchar(517),沒有默認值。object 可用現有對象全部者限定,格式爲 existing_owner.object。

 

[@newowner =] 'owner'

 

即將成爲對象的新全部者的安全賬戶的名稱。owner 的數據類型爲 sysname,沒有默認值。owner 必須是當前數據庫中有效的 Microsoft? SQL Server? 用戶或角色或 Microsoft Windows NT? 用戶或組。指定 Windows NT 用戶或組時,請指定 Windows NT 用戶或組在數據庫中已知的名稱(用 sp_grantdbaccess 添加)。

 

返回代碼值

0(成功)或 1(失敗)

 

註釋

對象全部者(或擁有對象的組或角色的成員)對對象有特殊的權限。對象全部者能夠執行任何與對象有關的 Transact-SQL 語句(例如 Insert、Update、Delete、Select 或 EXECUTE),也能夠管理對象的權限。

 

若是擁有對象的安全賬戶必需要除去,但同時要保留該對象,請使用 sp_changeobjectowner 更改對象全部者。該過程從對象中刪除全部現有權限。在運行 sp_changeobjectowner 以後,須要從新應用要保留的任何權限。

 

因爲這個緣由,建議在運行 sp_changeobjectowner 以前,編寫現有權限的腳本。一旦更改了對象的全部權,可能要使用該腳本從新應用權限。在運行該腳本以前須要在權限腳本中修改對象全部者。有關編寫數據庫腳本的更多信息,請參見編寫數據庫文檔和腳本。

 

可使用 sp_changedbowner 更改數據庫的全部者。

 

權限

只有 sysadmin 固定服務器角色和 db_owner 固定數據庫角色成員,或既是 db_ddladmin 固定數據庫角色又是 db_securityadmin 固定數據庫角色的成員,才能執行 sp_changeobjectowner。

 

示例

下面的示例將 authors 表的全部者改成 Corporate/GeorgeW。

 

EXEC sp_changeobjectowner 'authors', 'Corporate/GeorgeW'

 

 

請參見

改變數據庫全部者:sp_changedbowner

 

------------------------------以上摘自sql server 的聯機叢書

注意:

使用sqlserver2000改變對象(object)(如Table,SP,View)的全部者(owner)時,須要注意一點:

若是對象改變前的owner爲dbo,則直接用:exec sp_changeobjectowner 對象名,新的全部者名就能夠成功。若是再須要改變該對象的全部者,則要用以下語法:

exec sp_changeobjectowner "[全部者].[對象名]",新的全部者。注意,雙引號不可省略,不然提示objectname does not exist。

 

EXEC sp_changeobjectowner 'cqadmin.authors', 111

 

2.建與原表結構相同表,而後把數據從原表插入到新表,操做方法:

 

在sql server企業管理器中選擇原表點右鍵,選擇「全部任務/生存SQL腳本」,保存生成的腳本,在腳本中把表的原全部者改爲新全部者。而後再把該腳本運行一遍,數據庫中就新生成了一個表,全部者是新全部者,原來的表還在數據庫中沒有被替換。新表和舊錶 表名相同,全部者不一樣,此時的新表中沒有數據。

而後再運行下面的語句往新表中插入數據:

Insert INTO CQAdmin.m_actiondef //新全部者.新表名

Select *

FROM RegaltecDefSchema. CQAdministrator.m_actiondef // 數據庫名.舊全部者.舊錶名

運行完了就作完了,能夠把舊錶刪掉,也能夠留着。sql

相關文章
相關標籤/搜索