您的位置:首页 > 数据库 > 数据库管理 > 正文

修改sqlserver数据库所有者

更多 时间:2015-3-21 类别:数据库 浏览量:428

修改sqlserver数据库所有者

修改sqlserver数据库所有者

一、单个表修改

exec sp_changeobjectowner '要改的表名','dbo'

例如

 

  • 
    use test;
     
    go
     
    exec sp_changeobjectowner '[db_owner].[T1]','dbo';
     
    
    		
  •  

    二、批量修改数据库对象的所有者

    如果一个数据库里面的表对象非常多,那么使用该方法就非常的繁琐了。此时就可以使用sp_MSforeachtable来批量处理该工作。

    方法

     

  • 
    use test;
     
    go
     
    exec sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '
    
    
    		
  • 但是使用sp_MSforeachtable结合系统存储过程sp_changeobjectowner,只能修改数据库里面所有表对象的所有者(owner)。并不能修改视图、存储过程、用户函数的所有者。

     

    三、批量修改存储过程、视图、用户自定义函数的所有者

    方法

  •  
  • SQL 代码   复制
  • 
    declare tb cursor local for
     
    select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].['
     
    +replace(name,']',']]')+']'',''dbo'''
     
    from sysobjects
     
    where xtype in('U','V','P','TR','FN','IF','TF') and status>=0
     
    open tb
     
    declare @s nvarchar(4000)
     
    fetch tb into @s
     
    while @@fetch_status=0
     
    begin
     
    exec(@s)
     
    fetch tb into @s
     
    end
     
    close tb
     
    deallocate tb
     
    go
    
    		
  •  

    四、使用ALTER SCHEMA修改数据库对象的所有者

    例如

    ALTER SCHEMA dbo TRANSFER db_owner.T1;

     

    五、使用sp_changeobjectowner需要注意的地方

    在使用系统函数sp_changeobjectowner时,你都会收到一条提示信息“注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。”,这个是因为系统函数sp_changeobjectowner虽然会修改数据库对象的所有者,但是,在视图、存储过程、用户自定义函数里面,如果你使用了owner.object_name这种写法,系统函数并不能检测到。所以当数据库对象修改过后,就有可能导致部分视图、存储过程出现错误

     

    标签:SQL Server
  • 上一篇:ASP.NET Web API是什么
  • 下一篇:C#匿名类
  • 您可能感兴趣