俺只测试了表和存储过程,其它对象未有实际测试,使用前请备份数据库任何错误俺概不负责 ^_^

 1 /*
 2  brief:    改变数据库所有对象的所有者
 3  author: 吴尔平
 4  date:    2005/12/19
 5 */
 6 
 7 declare @owner varchar(255)
 8 set @owner = 'dbo'
 9 
10 declare @objectname varchar(255)
11 declare @uid int
12 declare object_cursor cursor for select [name],uid from sysobjects 
13 where  OBJECTPROPERTY (id, 'IsMSShipped'= 0 
14 and (xtype like  '%'--  如果要指定对象的类型,参考 Transact-SQL 帮助-> sysobjects-> xtype
15 open object_cursor
16 fetch next from object_cursor into @objectname@uid
17 while(@@fetch_status=0)
18 begin
19     declare @uidName varchar(255)
20     select @uidName = [name] from dbo.sysusers where uid = @uid
21     if @uidName <> @owner
22         begin
23             --生成 '所有者.对象名' 格式的字符串
24             set @objectname = @uidName + '.' + @objectname
25             --改变对象所有者
26             exec sp_changeobjectowner @objectname@owner
27         end
28 
29     fetch next from object_cursor into @objectname@uid
30 end
31 close object_cursor
32 deallocate object_cursor
33 go