香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > MSSQL >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

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


时间:2020-10-31 14:15 作者:admin


数据库操作当中,当数据库对象列表不只有一个普通的元素——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
——将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'
(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)