将Sql Server对象的当前拥有者更改成目标拥有者

2022-11-12 09:53:51
内容摘要
这篇文章主要为大家详细介绍了将Sql Server对象的当前拥有者更改成目标拥有者,具有一定的参考价值,可以用来参考一下。 对此感兴趣的朋友,看看idc笔记做的技术笔记!数据库操作
文章正文

这篇文章主要为大家详细介绍了将Sql Server对象的当前拥有者更改成目标拥有者,具有一定的参考价值,可以用来参考一下。

对此感兴趣的朋友,看看idc笔记做的技术笔记!

数据库操作当中,当数据库对象列表不只有一个普通的元素——objectname时,你将要使用objectowner.objectname来引用对象,但如果需要更改当前数据库中对象的所有者可以使用系统存储过程sp_changeobjectowner(点击这里更详细)sp_changeobjectowner更改当前数据库中对象的所有者。语法:sp_changeobjectowner[@objname=]'object',[,@newowner=]'owner'.参数.[@objname=]'object'.但往往由于数据库对象过多,希望批处理更改当前数据库中对象的所有者,那么你可以尝试使用NetFetch的nf_ChangeObjectOwner存储过程来完成批处理。具体用法如下:首先使用以下代码创建存储过程——nf_ChangeObjectOwner将SqlServer对象的当前拥有者更改成目标拥有者语法: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 

实现功能:将SqlServer对象的当前拥有者更改成目标拥有者 
****使用本代码前请备份数据库! 
****所带来的安全问题,与俺家的驴子无关! 
****欢迎斧头劈我,劈死偶有奖! 
调用方法:Execnf_ChangeObjectOwner@current_Owner,@target_Owner,@modify_Type 

输入参数:@current_Ownernvarchar(255)--对象的当前拥有者 
@target_Ownernvarchar(255)--对象的目标拥有者 
@modify_Typeint--0为默认,更改表的拥有者;1为视图和存储过程 
输出参数:RETURN值=-1--操作对象为0,操作对象不存在 
=-2--操作失败,可能对象被锁定 
=0(默认值)--操作成功,打印更改对象数目@object_Num 
@object_Num--SQL打印值,返回更改成功的对象数目 

@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——将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'

注:关于将Sql Server对象的当前拥有者更改成目标拥有者的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!