sql server 批量修改表和存储过程的所有者

Published by admin, at 10:17, Sep 11, 2008, under 技巧摘录
批量修改表的所有者:  
  EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ''?'',''dbo''   '  
  单个修改表所有者:  
  exec   sp_changeobjectowner   '要改的表名','dbo'  


批量修改存储过程的存储过程:

CREATE   PROCEDURE   ChangeProcOwner  
  @OldOwner as   NVARCHAR(128),--参数原所有者  
  @NewOwner as   NVARCHAR(128)--参数新所有者  
  AS  
    
  DECLARE   @Name   as   NVARCHAR(128)    
  DECLARE   @Owner as   NVARCHAR(128)  
  DECLARE   @OwnerName as   NVARCHAR(128)  
    
  DECLARE   curObject   CURSOR   FOR    
  select 'Name' =   name,  
  'Owner' =   user_name(uid)  
  from   sysobjects  
  where   user_name(uid)[email protected]   and   xtype='p'  
  order   by   name  
    
  OPEN     curObject  
  FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
  WHILE(@@FETCH_STATUS=0)  
  BEGIN          
  if   @[email protected]    
  begin  
  set   @OwnerName   =   @OldOwner   +   '.'   +   rtrim(@Name)  
  exec   sp_changeobjectowner   @OwnerName,   @NewOwner  
  end  
    
  FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
  END  
    
  close   curObject  
  deallocate   curObject  
  GO

执行 exec   ChangeProcOwner   'xx','dbo'
或者
exec   ChangeProcOwner   '?','dbo'


引用

修改所有用户表/存储过程/视图/触发器/自定义函数的所有者为dbo,则用游标(不要理会错误提示)

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

Tags: ,

lee Homepage 2008/09/19 21:28
grin该更新了
admin 回复于 2008/09/21 01:47
kill死卡 你MJJ
lee Homepage 2008/09/13 13:07
grin中秋快乐
admin 回复于 2008/09/13 21:41
shy卡卡
分页: 1/1 第一页 1 最后页
昵称   密码   游客无需密码
网址   电邮   [注册]