把mssql server所有表的所有者改为dbo

  今天有个客户的数据库转移到我们的服务器上,版本也是ms2000的,企业管理器可以打开数据内容。而用查询分析器执行任一操作,比如:“select * from gg”却一直报错:“服务器: 消息 208,级别 16,状态 1,行 1  对象名 'gg' 无效。”新建一个表一切OK,仔细对比了下其所有者不同。如图:


  解决办法:
  将当前库的所有表的所有者改为dbo后一切正常:
exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''

以SA登陆查询分析器,选中你要的数据库,执行上述SQL语句。把表或存储过程中的所有者都改成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

上一篇: SQL实现上一条下一条记录查询
下一篇: Microsoft VBscript 运行时错误 错误 '800a0046' 没有权限
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.