kid*_*33t 104 sql sql-server
我遇到了一些僵局.我有一些由一些C#代码生成的查询.查询在Microsoft SQL Server Management Studio针对同一数据库运行时工作正常.
但是,当我的代码尝试运行相同的查询时,我得到关于无效列的相同错误,并抛出异常.引用此列的所有查询都失败.
最近将该列添加到数据库中.这是一个名为的日期列Incident_Begin_Time_ts.
失败的一个例子是:
select * from PerfDiag
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';
Run Code Online (Sandbox Code Playgroud)
其他查询Select MAX(Incident_Being_Time_ts);在代码中运行时也会失败,因为它认为列缺失.
有任何想法吗?
小智 254
只需按Ctrl+ Shift+即可R看到......
在SQL Server Management Studio中,Ctrl + Shift + R刷新本地缓存.
Nic*_*rey 61
我怀疑你有两个同名的表.一个由架构'dbo'(dbo.PerfDiag)拥有,另一个由用于连接到SQL Server的帐户的默认架构(类似userid.PerfDiag)拥有.
如果对模式对象(例如表)具有非限定引用(未通过模式名称限定),则必须解析对象引用.通过按以下顺序搜索具有指定名称的相应类型(表)的对象,可以进行名称解析.该名称解析为第一场比赛:
非限定引用与上述序列中的第一个匹配绑定.
作为一般推荐的做法,出于性能原因,应始终限定对架构对象的引用:
非限定引用可能使存储过程或查询的高速缓存执行计划无效,因为绑定引用的模式可能会根据执行存储过程或查询的凭据而更改.这导致重新编译查询/存储过程,性能损失.重新编译会导致编译锁被取出,阻止其他人访问所需的资源.
名称解析会降低查询执行速度,因为必须进行两次探测以解析对象的可能版本(由'dbo'拥有).这是通常的情况.单个探测器解析名称的唯一时间是当前用户是否拥有指定名称和类型的对象.
[编辑进一步说明]
其他可能性(没有特别的顺序):
仔细检查连接字符串并确保它们显式指定SQL Server实例名称和数据库名称.
如果您在事务和SQL语句中运行此操作,则在删除/更改表之前,您也可以获取此消息.