MSSQL网站制作之将Sql Server工具确当前具有者变动成目...
恢复到之前的某个状态,是需要数据的。这数据可以是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)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=@current_Owner)
IfNot(Len(@current_Owner_uid)>0)
RETURN-1
If(@modify_Type=1)
DECLAREChangeObjectOwner_CursorCURSORFORSelectFromsysobjectsWhere(type=Uortype=Vortype=P)anduserstat=0andnf_ChangeObjectOwnerandstatus>-1anduid=@current_Owner_uid
Else
DECLAREChangeObjectOwner_CursorCURSORFORSelectFromsysobjectsWhere(type=Uortype=Vortype=P)anduserstat0anddtpropertiesanduid=@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
――将除用户表以外数据库工具(视图、存储历程)的具有者变动成你的用户名
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?! 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录. 备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
页:
[1]