一直正常运行的SQL procedure突然患病了,怪怪的!(20分)

  • 主题发起人 主题发起人 LWH006
  • 开始时间 开始时间
L

LWH006

Unregistered / Unconfirmed
GUEST, unregistred user!
昨晚突然发现,一直都运行得好好的procedure老是提示说某某列不存在,经检查发现是如下形式的临时表:<br>-------------------------------<br>CREATE PROCEDURE test<br>AS<br>set nocount on<br>select top 1 * into #TMP from TBL<br>select * from #TMP where AMOUNT&gt;100 &nbsp; &nbsp; --出错说 [列&quot;AMOUNT&quot;不存在]<br>GO <br>exec test<br>-------------------------------<br>疑问(1):这个procedure在查询分析器里依然可以正常运行,但只要由delphi前端ADOQuery调用,错误就出来了;<br>疑问(2):为什么以前一直这样都可以,现在就不行了。我重新给SQL打了sp4,依旧。昨晚发现的问题,一个晚上都没睡踏实~~<br><br>谢谢大伙关注。
 
TBL里面有AMOUNT列吗?仔细看看,是不是列名被你改变了,比如,原来创建这个列的时候,由于手工操作失误,列名被写成了AMO[red]NU[/red]T或者原来写的就是AMOUNT,但是某次修改数据库的时候,把列改名的时候写错了,写成了AM[red]UO[/red]NT之类的,结果你的sql里面没有改,所以出现这个问题?<br><br>纯属猜测.
 
有啊!<br>如果没有的话,在查询分析器里就无法执行了。所以感觉很奇怪。
 
那就真是遇到鬼了!!!!!!!!!!!
 
鬼鬼鬼鬼鬼鬼鬼鬼鬼鬼鬼鬼鬼..........
 
是不是ADOQuery里面将字段写死了 里面少了一个AMOUNT字段哦
 
ADOQuery里只写有 exec test &nbsp;。
 
谢谢各位的热心,问题总算是找到了:<br>在登入系统时,用SQL.add()的方式执行了几句SQL代码,其中就建了一个临时表,名字也叫#TMP,但结束时少了一句 drop table #TMP 。于是,再执行其它procedure时,比如test,第一句<br>select top 1 * into #TMP from TBL<br>就没有建表,而是插入既有表,从而导致错误。
 
多人接受答案了。
 
后退
顶部