将Sql Server对象的当前拥有者更改成目标拥有者
2006-10-28 00:00
357 查看
数据库操作当中,当数据库对象列表不只有一个普通的元素――objectname时,你将要使用objectowner.objectname来引用对象,但如果需要更改当前数据库中对象的所有者可以使用系统存储过程 sp_changeobjectowner (点击这里更详细)
sp_changeobjectowner
更改当前数据库中对象的所有者。
语法: sp_changeobjectowner [ @objname = ] 'object' , [, @newowner = ] 'owner'. 参数. [@objname =] 'object'.
但往往由于数据库对象过多,希望批处理更改当前数据库中对象的所有者,那么你可以尝试使用Net Fetch的 nf_ChangeObjectOwner 存储过程来完成批处理。具体用法如下:
首先使用以下代码创建存储过程――
nf_ChangeObjectOwner
将Sql Server对象的当前拥有者更改成目标拥有者
语法:nf_ChangeObjectOwner [, @current_Owner = ] 'owner',[,@target_Owner =] 'owner',[ ,@modify_Type=] type
Usage(使用方法): Exec nf_ChangeObjectOwner 'dbo','你的用户名',0
――将所有用户表的拥有者更改成'你的用户名'
Usage(使用方法): Exec nf_ChangeObjectOwner 'dbo','你的用户名',1
――将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'
sp_changeobjectowner
更改当前数据库中对象的所有者。
语法: sp_changeobjectowner [ @objname = ] 'object' , [, @newowner = ] 'owner'. 参数. [@objname =] 'object'.
但往往由于数据库对象过多,希望批处理更改当前数据库中对象的所有者,那么你可以尝试使用Net Fetch的 nf_ChangeObjectOwner 存储过程来完成批处理。具体用法如下:
首先使用以下代码创建存储过程――
nf_ChangeObjectOwner
将Sql Server对象的当前拥有者更改成目标拥有者
语法:nf_ChangeObjectOwner [, @current_Owner = ] 'owner',[,@target_Owner =] 'owner',[ ,@modify_Type=] type
if exists (select * from sysobjects where id = object_id(N'[nf_ChangeObjectOwner]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure nf_ChangeObjectOwner GO Create PROCEDURE nf_ChangeObjectOwner @current_Owner nvarchar(255), @target_Owner nvarchar(255), @modify_Type int /*********************************************************************************************** nf_ChangeObjectOwner 实现功能: 将Sql Server对象的当前拥有者更改成目标拥有者 **** 使用本代码前请备份数据库! **** 所带来的安全问题,与俺家的驴子无关! **** 欢迎斧头劈我,劈死偶有奖! 调用方法: Exec nf_ChangeObjectOwner @current_Owner,@target_Owner,@modify_Type 输入参数: @current_Owner nvarchar(255) --对象的当前拥有者 @target_Owner nvarchar(255) --对象的目标拥有者 @modify_Type int --0为默认,更改表的拥有者;1为视图和存储过程 输出参数: RETURN值 = -1 --操作对象为0,操作对象不存在 = -2 --操作失败,可能对象被锁定 = 0(默认值) --操作成功,打印更改对象数目@object_Num @object_Num --SQL 打印值,返回更改成功的对象数目 @Write by Net Fetch. @At 2005/09/12 @Email: cnNetFetch*Gmail.Com blog.ad0.cn ************************************************************************************************/ AS DECLARE @str_Tbl_Name nvarchar(255),@object_Num int,@current_Owner_uid smallint Set @object_Num = 0 DECLARE @return_status int Set @return_status = -1 Set @current_Owner_uid = (Select uid From sysusers Where [Name] = @current_Owner) If Not (Len(@current_Owner_uid)>0) RETURN -1 If (@modify_Type = 1) DECLARE ChangeObjectOwner_Cursor CURSOR FOR Select [Name] From sysobjects Where (type='U' or type='V' or type='P') and userstat=0 and [Name]<>'nf_ChangeObjectOwner' and status>-1 and uid = @current_Owner_uid Else DECLARE ChangeObjectOwner_Cursor CURSOR FOR Select [Name] From sysobjects Where (type='U' or type='V' or type='P') and userstat<>0 and [Name]<>'dtproperties' and uid = @current_Owner_uid OPEN ChangeObjectOwner_Cursor BEGIN TRANSACTION Change_ObjectOwner FETCH NEXT FROM ChangeObjectOwner_Cursor INTO @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 ROLLBACK TRANSACTION Change_ObjectOwner RETURN -2 END Set @object_Num = @object_Num + 1 FETCH NEXT FROM ChangeObjectOwner_Cursor INTO @str_Tbl_Name END Print @object_Num COMMIT TRANSACTION Change_ObjectOwner CLOSE ChangeObjectOwner_Cursor DEALLOCATE ChangeObjectOwner_Cursor Go
Usage(使用方法): Exec nf_ChangeObjectOwner 'dbo','你的用户名',0
――将所有用户表的拥有者更改成'你的用户名'
Usage(使用方法): Exec nf_ChangeObjectOwner 'dbo','你的用户名',1
――将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'
相关文章推荐
- 将Sql Server对象的当前拥有者更改成目标拥有者
- 将Sql Server对象的当前拥有者更改成目标拥有者
- SQL SERVER中一些对象的名称更改
- 在使用Sql server 2005 生成脚本时,出现目标服务器版本不支持该对象或不支持该对象的一个属性。 (Microsoft.SqlServer.Smo)的解决办法
- SQL Server 2005更改当前数据库的所有者
- 更改SQL Server更改当前数据库的所有者:sp_changedbowner
- 如何更改SQL Server对象所有者...
- 更改当前数据库中对象的所有者
- sql server中批量更改对象的所有者
- 浅析SQL SERVER一个没有公开的存储过程 (更改对象的所有者)
- sp_rename 更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
- 更改SQL Server更改当前数据库的所有者:sp_changedbowner
- 更改当前数据库中 SQL Server 用户与 Microsoft® SQL Server™ 登录之间的关系
- SQL2000滴系统存储过程--sp_changeobjectowner(更改当前数据库中对象的所有者)
- DBCC大全集之(适用版本MS SQLServer 2008 R2)---DBCC CHECKIDENT在 SQL Server 2008 R2 中检查指定表的当前标识值,如有必要,则更改标识值
- Reporting Services中通过主报表钻取到子报表再动态更改ReportViewer控件的reportPath时,提示错误对象的当前状态使该操作无效。
- 【SQL Server学习笔记】23:部分可编程对象
- SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
- jquery获取当前点击对象
- 社工方法加载OLE对象,更改浏览器代理设置窃取信息