单个修改所有者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’
评论前必须登录!
注册