將Sql Server對象的當(dāng)前擁有者更改成目標(biāo)擁有者
發(fā)布日期:2022-02-04 17:23 | 文章來源:gibhub
sp_changeobjectowner
更改當(dāng)前數(shù)據(jù)庫中對象的所有者。
語法:sp_changeobjectowner[@objname=]'object',[,@newowner=]'owner'.參數(shù).[@objname=]'object'. 但往往由于數(shù)據(jù)庫對象過多,希望批處理更改當(dāng)前數(shù)據(jù)庫中對象的所有者,那么你可以嘗試使用NetFetch的nf_ChangeObjectOwner存儲過程來完成批處理。具體用法如下: 首先使用以下代碼創(chuàng)建存儲過程—— nf_ChangeObjectOwner
將SqlServer對象的當(dāng)前擁有者更改成目標(biāo)擁有者
語法:nf_ChangeObjectOwner[,@current_Owner=]'owner',[,@target_Owner=]'owner',[,@modify_Type=]type
ifexists(select*fromsysobjectswhereid=object_id(N'[nf_ChangeObjectOwner]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedurenf_ChangeObjectOwner
GO CreatePROCEDUREnf_ChangeObjectOwner
@current_Ownernvarchar(255),
@target_Ownernvarchar(255),
@modify_Typeint
/*********************************************************************************************** nf_ChangeObjectOwner 實現(xiàn)功能:將SqlServer對象的當(dāng)前擁有者更改成目標(biāo)擁有者
****使用本代碼前請備份數(shù)據(jù)庫!
****所帶來的安全問題,與俺家的驢子無關(guān)!
****歡迎斧頭劈我,劈死偶有獎!
調(diào)用方法:Execnf_ChangeObjectOwner@current_Owner,@target_Owner,@modify_Type 輸入?yún)?shù):@current_Ownernvarchar(255)--對象的當(dāng)前擁有者
@target_Ownernvarchar(255)--對象的目標(biāo)擁有者
@modify_Typeint--0為默認,更改表的擁有者;1為視圖和存儲過程
輸出參數(shù):RETURN值=-1--操作對象為0,操作對象不存在
=-2--操作失敗,可能對象被鎖定
=0(默認值)--操作成功,打印更改對象數(shù)目@object_Num
@object_Num--SQL打印值,返回更改成功的對象數(shù)目 @WritebyNetFetch.@At2005/09/12
@Email:cnNetFetch*Gmail.Comblog.ad0.cn ************************************************************************************************/
AS
DECLARE@str_Tbl_Namenvarchar(255),@object_Numint,@current_Owner_uidsmallint
Set@object_Num=0
DECLARE@return_statusint
Set@return_status=-1
Set@current_Owner_uid=(SelectuidFromsysusersWhere[Name]=@current_Owner)
IfNot(Len(@current_Owner_uid)>0)
RETURN-1
If(@modify_Type=1)
DECLAREChangeObjectOwner_CursorCURSORFORSelect[Name]FromsysobjectsWhere(type='U'ortype='V'ortype='P')anduserstat=0and[Name]<>'nf_ChangeObjectOwner'andstatus>-1anduid=@current_Owner_uid
Else
DECLAREChangeObjectOwner_CursorCURSORFORSelect[Name]FromsysobjectsWhere(type='U'ortype='V'ortype='P')anduserstat<>0and[Name]<>'dtproperties'anduid=@current_Owner_uid
OPENChangeObjectOwner_Cursor
BEGINTRANSACTIONChange_ObjectOwner
FETCHNEXTFROMChangeObjectOwner_CursorINTO@str_Tbl_Name
WHILE(@@FETCH_STATUS=0)
BEGIN
Set@str_Tbl_Name=@current_Owner+'.'+@str_Tbl_Name
Print@str_Tbl_Name
EXEC@return_status=sp_changeobjectowner@str_Tbl_Name,@target_Owner
IF(@return_status<>0)
BEGIN
ROLLBACKTRANSACTIONChange_ObjectOwner
RETURN-2
END
Set@object_Num=@object_Num+1
FETCHNEXTFROMChangeObjectOwner_CursorINTO@str_Tbl_Name
END
Print@object_Num
COMMITTRANSACTIONChange_ObjectOwner
CLOSEChangeObjectOwner_Cursor
DEALLOCATEChangeObjectOwner_Cursor Go
Usage(使用方法):Execnf_ChangeObjectOwner'dbo','你的用戶名',0
——將所有用戶表的擁有者更改成'你的用戶名'
Usage(使用方法):Execnf_ChangeObjectOwner'dbo','你的用戶名',1
——將除了用戶表之外數(shù)據(jù)庫對象(視圖、存儲過程)的擁有者更改成'你的用戶名'
更改當(dāng)前數(shù)據(jù)庫中對象的所有者。
語法:sp_changeobjectowner[@objname=]'object',[,@newowner=]'owner'.參數(shù).[@objname=]'object'. 但往往由于數(shù)據(jù)庫對象過多,希望批處理更改當(dāng)前數(shù)據(jù)庫中對象的所有者,那么你可以嘗試使用NetFetch的nf_ChangeObjectOwner存儲過程來完成批處理。具體用法如下: 首先使用以下代碼創(chuàng)建存儲過程—— nf_ChangeObjectOwner
將SqlServer對象的當(dāng)前擁有者更改成目標(biāo)擁有者
語法:nf_ChangeObjectOwner[,@current_Owner=]'owner',[,@target_Owner=]'owner',[,@modify_Type=]type
復(fù)制代碼 代碼如下:
ifexists(select*fromsysobjectswhereid=object_id(N'[nf_ChangeObjectOwner]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedurenf_ChangeObjectOwner
GO CreatePROCEDUREnf_ChangeObjectOwner
@current_Ownernvarchar(255),
@target_Ownernvarchar(255),
@modify_Typeint
/*********************************************************************************************** nf_ChangeObjectOwner 實現(xiàn)功能:將SqlServer對象的當(dāng)前擁有者更改成目標(biāo)擁有者
****使用本代碼前請備份數(shù)據(jù)庫!
****所帶來的安全問題,與俺家的驢子無關(guān)!
****歡迎斧頭劈我,劈死偶有獎!
調(diào)用方法:Execnf_ChangeObjectOwner@current_Owner,@target_Owner,@modify_Type 輸入?yún)?shù):@current_Ownernvarchar(255)--對象的當(dāng)前擁有者
@target_Ownernvarchar(255)--對象的目標(biāo)擁有者
@modify_Typeint--0為默認,更改表的擁有者;1為視圖和存儲過程
輸出參數(shù):RETURN值=-1--操作對象為0,操作對象不存在
=-2--操作失敗,可能對象被鎖定
=0(默認值)--操作成功,打印更改對象數(shù)目@object_Num
@object_Num--SQL打印值,返回更改成功的對象數(shù)目 @WritebyNetFetch.@At2005/09/12
@Email:cnNetFetch*Gmail.Comblog.ad0.cn ************************************************************************************************/
AS
DECLARE@str_Tbl_Namenvarchar(255),@object_Numint,@current_Owner_uidsmallint
Set@object_Num=0
DECLARE@return_statusint
Set@return_status=-1
Set@current_Owner_uid=(SelectuidFromsysusersWhere[Name]=@current_Owner)
IfNot(Len(@current_Owner_uid)>0)
RETURN-1
If(@modify_Type=1)
DECLAREChangeObjectOwner_CursorCURSORFORSelect[Name]FromsysobjectsWhere(type='U'ortype='V'ortype='P')anduserstat=0and[Name]<>'nf_ChangeObjectOwner'andstatus>-1anduid=@current_Owner_uid
Else
DECLAREChangeObjectOwner_CursorCURSORFORSelect[Name]FromsysobjectsWhere(type='U'ortype='V'ortype='P')anduserstat<>0and[Name]<>'dtproperties'anduid=@current_Owner_uid
OPENChangeObjectOwner_Cursor
BEGINTRANSACTIONChange_ObjectOwner
FETCHNEXTFROMChangeObjectOwner_CursorINTO@str_Tbl_Name
WHILE(@@FETCH_STATUS=0)
BEGIN
Set@str_Tbl_Name=@current_Owner+'.'+@str_Tbl_Name
Print@str_Tbl_Name
EXEC@return_status=sp_changeobjectowner@str_Tbl_Name,@target_Owner
IF(@return_status<>0)
BEGIN
ROLLBACKTRANSACTIONChange_ObjectOwner
RETURN-2
END
Set@object_Num=@object_Num+1
FETCHNEXTFROMChangeObjectOwner_CursorINTO@str_Tbl_Name
END
Print@object_Num
COMMITTRANSACTIONChange_ObjectOwner
CLOSEChangeObjectOwner_Cursor
DEALLOCATEChangeObjectOwner_Cursor Go
Usage(使用方法):Execnf_ChangeObjectOwner'dbo','你的用戶名',0
——將所有用戶表的擁有者更改成'你的用戶名'
Usage(使用方法):Execnf_ChangeObjectOwner'dbo','你的用戶名',1
——將除了用戶表之外數(shù)據(jù)庫對象(視圖、存儲過程)的擁有者更改成'你的用戶名'
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章