SQL修改表的所有者 | |
发起人:孙帅 回复数:3 浏览数:29329 最后更新:2010/4/20 21:30:04 by 孙帅 |
选择查看 | 搜索更多相关主题 帖子排序: |
孙帅 发表于 2008/8/3 23:39:37
|
||
SQL修改表的所有者 做了这个SQL论坛以后,一直没有解决数据库备份问题。在好多论坛讨教过,目前问题集中到修改表的所有者上来。在网上搜索了好多帖子,比较凌乱地保存在这里,供自己慢慢学习消化。 ·转移后由于sql server中的数据库所有者会发生变化,而sql server目前的版本无法自己调整数据表的所有者。 ·解决这个问题的办法很简单:假设你的数据库叫discuz,原来的所有者是用户user1,备份还原后你新建立了一个用户user2,遇到上述问题后,以管理员身份进入查询分析器,选择数据库discuz,执行以下SQL命令: ·单个修改所有者sql语句如下: ·我建了一个库,用户表的建立者全是DBO,请问如何将所有用户表都的owner全部必为‘aaa'。我发现了一个sp_changeobjectowner 'authors','aaa'这个存储过程,但只能一个一个改。请问用什么方法可以全部改正。 ·前段时间做了一ASP+SQL2000网站,所有数据全部都集中在SQL2000库里。 ·Transact-SQL 参考 |
孙帅 发表于 2008/8/6 18:52:07
|
||
为了在本机上建一个和网站一模一样的试验环境(同时也为了更好地备份数据,以及学习服务器转移),花费了很多精力,今天终于试验成功了! 具体做法: 1、把空间数据库备份后,强制还原到本机。这时本机数据库表的所有者“sjk”变成了空间上的所有者“A123”,本机论坛无法运行(找不到数据库了),需要重新安装。 2、在强制还原后的本机数据库新建(其实是恢复)原有用户名“sjk”。这一步不能少,不然执行修改表名的语句时就会出现错误:“服务器: 消息 15410,级别 11,状态 1,过程 sp_changeobjectowner,行 55 此数据库中不存在用户或角色 'sjk'。” 3、在企业管理器中选择本机数据库“sjk”,点击工具按钮,选择“SQL 查询分析器”。在查询分析器窗口输入批量修改表的所有者语句:“exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''sjk'''”(不带汉字双引号),执行后出现提示:“注意: 更改对象名的任一部分都可能破坏脚本和存储过程。” 返回企业管理器,本机数据库“sjk”中的表所有者已经改为“sjk”。打开本机论坛,空间上的所有数据原封不动地复制到了本机。 成功了! |
孙帅 发表于 2008/8/6 18:57:01
|
||
收尾工作:在企业管理器中选择本机数据库“sjk”,点击“用户”。删除因强制还原而出现的空间上的用户“A123”。 大功告成! |
孙帅 发表于 2010/4/20 21:30:04
|
||
如果本机数据库表的所有者和空间上的所有者相同,均为“sjk”,则在第二步强制还原后的本机数据库新建(其实是恢复)原有用户名时会提示:“无法更改对象"sjk"或其所属的某个子对象的所有者,因为新所有者"sjk"已有同名的对象”无法新建所有者。 此时可先将数据库表的所有者批量修改为“dbo”,删除原所有者“sjk”后再新建这个同名所有者,然后再执行批量修改表的所有者语句,将所有者从“dbo”恢复为“sjk”。 |
用户在线信息 |
当前查看此主题的会员: 1 人。其中注册用户 0 人,访客 1 人。 |