|
导读
|
本文主要介绍了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数据库了:
这个时候在下拉列表中把数据库选为表所在的数据库就可以了。
www.linuxprobe.com
三、缓存问题,这个比较简单,但是应该不会发生在数据库刚打开的时候,应该是发生在做了几次操作之后,情况跟第一种一样,解决办法就是清楚缓存,快捷键ctrl+shift+r
导读 本文主要介绍了SQL server中提示对象名无效的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 产生SQL对象名无效的问题大多原因是由于数据迁移导致的,下面我们给出解决方法. 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。一、孤立用户的问题 比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,t
程序调用
数据库
表时,报“
对象
名
***
无效
”,无法获取数据或者在
数据库
管理器
中
操作表时,会发现表
名
会有红色波浪线标注,显示错误,鼠标点击之后发现
提示
“
对象
名
***
无效
”,但是我们继续操作,又不会对操作有任何影响。
产生原因:在你保存表的时候服务器正在运行,保存只是进入了缓存,运行着的服务器并不能调用,所以显示错误
解决
方法:关闭服务器,重新打开,并且重新连接服务器
产生原因:导入
数据库
或恢复数据后,登陆用户对库没有相应的权限
解决
方法:执行语句 ex...
SQL
2005加入触发器
对象
名
无效
的
解决
办法
原来触发器开头是这样写(从2000变成2005自动写成了这个样子)的:
ALTER TRIGGER [aa] ON [dbo].[T_aa] AFTER INSERT, UPDATE
怎么弄都
提示
aa
对象
名
无效
查了很多,说什么权限问题的,可是都没办法
解决
后来把2000的触发器开头写了进去
CREATE TRIGGER [aa]...
查询的时候报
对象
名
无效
,
数据库
,数组表都存在~ 百思不得其解...发现"jdbc:microsoft:
sqlserver
://localhost:1433; DatabaseName=DB" 在1433后面多了一个空格...去掉空格万事ok
正确写法"jdbc:microsoft:
sqlserver
://localhost:1433;DatabaseName=DB"
解决
方法:
鼠标要放在你要进行查询的
数据库
中
,比如实验三

再点击新建查询,然后接下来的操作才能执行;
一开始我还原数据到实验三时,鼠标就一直在
数据库
上,当我再次点击时,是对整个
数据库
的操作,而不是
在新建查询时,你已经执行了一次,比如建表,然后你选择执行;接着你想插入数据,就在原有的基础上写代码,然后新建查询,你会发现下面
提示
执行成功但有错误,也没有说几行·受影响。查看
数据库
第一次建立的表后你发现
对象
名
无效
。原因是你建表的代码又执行了一次,这是不行的,
数据库
已经存在了,所以你必须一次性写完后再执行,或者(不推荐)你把第一次执行的代码删除,再执行,你发现可以执行了,也成功插入数据了。
今天学习
数据库
时,需要在已创建的表student
中
添加数据,按照书
中
给的语句编写:
insert into student('nameID','name','age')
values('20010101','john',20)
运行却报错“
对象
名
‘student’
无效
”。
解决
方法:
1.在图
中
所示位置选择所需修改的表所在的
数据库
。(我的
数据库
名
是studentInfo,根据自己实际情况选择)
2.在表
名
前添加"
数据库
名
.dbo",比如以上代码改为:
insert into studentInfo.db
问题的产生
在
SQL
server
2008 R2软件
中
,已经创建了一个
名
为Student的
数据库
,在其
中
创建了一个
名
为dbo.Department的表,接着打算查询一下表
中
的内容,因此使用SELECT语句,如下图所示,表示查询该表
中
的任意一行。
键入完毕后,点击执行按钮
然而,在消息
中
提示
“
对象
名
无效
”的错误
可是,在Student
数据库
中
,是有这个表的。
由此,就产生了偏差。
问题的
解决
通过一系列探索以及资料的查询,我明白了,其实是
数据库
选用的问题,
在软件左上角我选
中
的
数据库
是m..
public virtual DbSet users { get; set; }
这个说明了context的users,注意这里后缀有一个s,它与
数据库
表user对应。因为这个在以前一直是好好的。从来没有出过错误。只是最近对对visual studio做了次更新导致的。想返回原来的vs版本也不可能。只能想办法
解决
。
通过比较出错项目,
SQL
2012,表存在,查询语句也能执行,但是表
名
下面总是有条红线,说
对象
名
无效
?
就是这个问题查询能成功执行,但是表
名
总是会出现红线,我在别的新建
数据库
里有也这问题,但是在系统
数据库
里用它原本就有的表的时候就不会出现红线了,这是为什么?
ctrl+shift+R 就OK了,就是刷新本地缓存
点“
对象
资源管理器”窗格
中
的“刷新”按钮,对应“F5”功能键。