分享你我的心得.
共乘一片美好网络.

SQL2000 修改表所有者的方法

单个修改所有者sql语句如下:

查询分析器输入:EXEC sp_changeobjectowner ‘user.table’, ‘dbo’

user.table的意思为:所有者.表名,比如oblog.oblog_user,以前的语句表示将table这张表的所有者由

user改成dbo

批量修改所有者语句如下:

查询分析器输入:exec sp_msforeachtable ‘sp_changeobjectowner ”?”, ”dbo”’

即可把当面表的所有所有者换成dbo

第二种方法:

更改数据库所有者并不能影响已经创建的表的所有者,你需要使用sp_changeobjectower来改变对象的所有者,并且对象的所有者sa对应的是dbo

以下语句是利用游标,读取mydb帐户拥有的所有对象,并将其所有者更改为sa
另外如果之前本地不存在mydb帐户,可能会导致孤立帐户的出现,你先试试能不能成功吧,如果不行,再提供给你解决方法。

declare cur cursor for
select name
from sysobjects
where uid=user_id(‘mydb’)

declare @name sysname
declare @sqlstr varchar(5000)

open cur
fetch next from cur
into @name

while @@fetch_status=0
begin
set @sqlstr=’exec sp_changeobjectowner ”mydb.’+@name+”’,”dbo”’
exec (@sqlstr)
fetch next from cur
into @name
end
close cur
deallocate cur

 

批量修改储存过程所有者的方式
第一步,先通过查询分析器建立储存过程,代码如下

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)=@OldOwner   and   xtype=’p’  
order   by   name  
   
OPEN     curObject  
FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
WHILE(@@FETCH_STATUS=0)  
BEGIN          
if   @Owner=@OldOwner    
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    ‘原所有者’,’dbo’

赞(0)
未经允许不得转载:小叶白龙博客 » SQL2000 修改表所有者的方法
分享到: 更多 (0)

评论 438

评论前必须登录!