您正在使用 IPV4 [18.191.195.110] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】2核2G4M云服务器新老同享99元/年,续费同价      
[公益] 地球是我家,绿化靠大家      
2024年 劳动节 004
2024年 端午节 044
2025年 元 旦 249
2025年 春 节 277
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
将Sql Server对象的当前拥有者更改成目标拥有者
内容摘要: 数据库操作当中,当数据库对象列表不只有一个普通的元素——objectname时,你将要使用objectowner.objectname来引用对象,但如果需要更改当前数据库中对象的所有者可以使用系统存储过程sp_changeobjectowner(点击这里更详细)sp_changeobjectowner更改当前数据库中对象的所有者。语法:sp_changeob......
数据库操作当中,当数据库对象列表不只有一个普通的元素——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数据库日志文件收缩操作方法

 

下一篇:MySQL忽略表名大小写的2种方法实现

发布日期:2024/2/26
手机扫二维码直达本页
发布时间:13:23:35
点  击:16
录  入:壹家怡园
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,奇安信网站卫士提供加速防护
运行时间载入中.....