将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代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <code>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 </code> |
注:关于将Sql Server对象的当前拥有者更改成目标拥有者的内容就先介绍到这里,更多相关文章的可以留意
代码注释