共计 1352 个字符,预计需要花费 4 分钟才能阅读完成。
导读 | 本文主要介绍了 SQL server 中提示对象名无效的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 |
产生 SQL 对象名无效的问题大多原因是由于数据迁移导致的, 下面我们给出解决方法. 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。
一、孤立用户的问题 比如,以前的数据库的很多表是用户 test 建立的,但是当我们恢复数据库后,test 用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个 test 登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于 test 的用户表。
这个问题有两种办法解决。先说解决的前提条件。首先,要用备份文件还原数据库,我们这里的数据库名为 testdb,里面有属于用户 test 的用户表。这个很容易了操作了,不多讲了,在企业管理器中很方便可以恢复。恢复后,就产生了孤立用户 test。然后,用 sa 用户或者具有 DBA 权限的用户登录,创建一个 test 数据库登录用户,密码随便设置了,也可以和以前的保持一致。我们用它来对应孤立的 test 用户。
使登录用户和数据库的孤立用户对应起来 其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用时因为 sid 的不同,就是系统登录表和数据库用户表中的用户名相同,单是 sid 字段,数据库中的还是以前旧系统的 sid 值,所以我们就要把它对应成我们新建的,数据库靠 sid 来识别用户。这里可以使用存储过程 sp_change_users_login。它有三种动作,分别是 report,update_one 和 auto_fix。
运行 sp_change_users_login ‘report’,系统会列出当前数据库的孤立用户数。
我们只需要选择当前数据库为 testdb,然后运行 sp_change_users_login ‘update_one’,’test’,’test’ – 系统就会提示修复了一个孤立用户。
如果没有建立 test 的登录用户,还可以用 sp_change_users_login ‘Auto_Fix’, ‘test’, NULL, ‘testpassword’ – 来创建一个登录用户名为 test,密码为 testpassword 的用户与之对应。好了,到这里通常情况下,数据库对象得到访问问题已经解决了。如果有多个数据库中有同一个用户的数据表,只需要选择不同的数据库,执行 update_one 的那个就行了。
二、刚打开 SQL server Manager Studio,想看看表里的信息,就写一个查询语句,结果表名下有红线,并且执行的时候还提示对象名无效:
这是因为没有选定数据库名,因为 test 只是一个表名,数据库默认为 master 数据库了:
这个时候在下拉列表中把数据库选为表所在的数据库就可以了。
三、缓存问题,这个比较简单,但是应该不会发生在数据库刚打开的时候,应该是发生在做了几次操作之后,情况跟第一种一样,解决办法就是清楚缓存,快捷键 ctrl+shift+r