|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
恢复到之前的某个状态,是需要数据的。这数据可以是a)回滚步骤或者b)操作之前的数据状态原文。server|工具数据库操纵傍边,当数据库工具列表不但有一个一般的元素――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
[复制此代码]CODE:
ifexists(select*fromsysobjectswhereid=object_id(N[nf_ChangeObjectOwner])andOBJECTPROPERTY(id,NIsProcedure)=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=Uortype=Vortype=P)anduserstat=0and[Name]nf_ChangeObjectOwnerandstatus>-1anduid=@current_Owner_uid
Else
DECLAREChangeObjectOwner_CursorCURSORFORSelect[Name]FromsysobjectsWhere(type=Uortype=Vortype=P)anduserstat0and[Name]dtpropertiesanduid=@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_status0)
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_ChangeObjectOwnerdbo,你的用户名,0
――将一切用户表的具有者变动成你的用户名
Usage(利用办法):Execnf_ChangeObjectOwnerdbo,你的用户名,1
――将除用户表以外数据库工具(视图、存储历程)的具有者变动成你的用户名
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。 |
|