将Sql Server对象的当前拥有者更改成目标拥有者

青青河边草6400

青青河边草6400

2016-02-19 12:10

今天给大家分享的是由图老师小编精心为您推荐的将Sql Server对象的当前拥有者更改成目标拥有者,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!
数据库操作当中,当数据库对象列表不只有一个普通的元素——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
代码如下:

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 userstat0 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
   ——将除了用户表之外数据库对象(视图、存储过程)的拥有者更改成'你的用户名'
展开更多 50%)
分享

猜你喜欢

将Sql Server对象的当前拥有者更改成目标拥有者

编程语言 网络编程
将Sql Server对象的当前拥有者更改成目标拥有者

更改SQL Server更改当前数据库的所有者:sp_changedbowner

编程语言 网络编程
更改SQL Server更改当前数据库的所有者:sp_changedbowner

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

把sql server的用户表的所有者改成dbo

编程语言 网络编程
把sql server的用户表的所有者改成dbo

Linux如何调整目录文件的拥有者和拥有组

服务器
Linux如何调整目录文件的拥有者和拥有组

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

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

编程语言 网络编程
SQL Server 中调整自增字段的当前初始值

SQL Server提示"选定的用户拥有对象,所以无法除去该用户”

编程语言 网络编程
SQL Server提示"选定的用户拥有对象,所以无法除去该用户”

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C#学习笔记(2)

C#学习笔记(2)

Windows 8 中如何添加图标到开始屏幕

Windows 8 中如何添加图标到开始屏幕
下拉加载更多内容 ↓