手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >将Sql Server对象的当前拥有者更改成目标拥有者
将Sql Server对象的当前拥有者更改成目标拥有者
摘要:数据库操作当中,当数据库对象列表不只有一个普通的元素——objectname时,你将要使用objectowner.objectname来引用...

数据库操作当中,当数据库对象列表不只有一个普通的元素——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对象的当前拥有者更改成目标拥有者】相关文章:

SQL Server 中调整自增字段的当前初始值

简单的SQL Server备份脚本代码

解决SQL Server 表或索引的碎片问题

在SQL Server 2005所有表中搜索某个指定列的方法

如何将SQL Server表驻留内存和检测

SQL Server 2005 开启数据库远程连接的方法

SQL Server 2008 安装SQLDMO.dll的方法

sqlserver 一张表两列都的值都相同处理

sql server 关于设置null的一些建议

SQL Server 2005支持的两条新语法

精品推荐
分类导航