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

更多相关文章

  1. 类和 Json对象
  2. Android中文API(144) —— JsonWriter
  3. Android之Handler用法总结
  4. android通过ksoap2对webservice的解析
  5. Android(安卓)View的介绍和使用
  6. Android中,把XML文件转换成Object对象的方法
  7. Android中使用Gson解析JSON数据
  8. Android中使用Gson解析JSON数据
  9. Android(安卓)基础UI编程2

随机推荐

  1. Android 防止点击事件连按,isFastClick()
  2. Android studio2.3.3升级到3.1.2坑(小记)
  3. Android Progrees处理
  4. Android 8.1 系统锁屏显示流程整理
  5. Using C++ Code in Android Application
  6. Android(安卓)6.0运行时权限解决方案
  7. ScrollView中的LinearLayout不能使用andr
  8. Android不错的图片压缩方法
  9. Android 打开关闭闪光灯工具类
  10. android 的C++代码都加 namespace androi