SQL语句问题
我在程序中有这样的一句:
update ac_Record set
ac_record.EnterTime = (SELECT Min(inTime) FROM ent_rec
where (ent_rec.inTime between
ac_record.BeginTIme and ac_record.EndTime)
and (ent_rec.uID = ac_record.staffID)),
ac_record.LeaveTime = (SELECT Max(inTime) FROM ent_rec
where (ent_rec.inTime between
ac_record.BeginTIme and ac_record.EndTime)
and (ent_rec.uID = ac_record.staffID))
FROM ac_record, Ent_Rec
WHERE ac_record.datet between
'2004-8-3' and '2004-8-2'
在我的开发的电脑上一切正常,但装到别的电脑上总是出现执行超时错误,请高手帮忙。
waiting online, thank you very much
问题点数:100、回复次数:17Top
1 楼favan(SUPER.NET)回复于 2004-08-03 16:59:42 得分 0
自己顶一下先Top
2 楼ljmanage(过客)回复于 2004-08-03 17:01:28 得分 10
将YTimeOut时间设置长一点看看Top
3 楼favan(SUPER.NET)回复于 2004-08-03 17:04:21 得分 0
TO : ljmanage(过客)
但在我的电脑上只要几十毫秒就执行玩了的呀Top
4 楼insert2003(高级打字员)回复于 2004-08-03 17:08:05 得分 10
将数据库控件如ADOQuery的CommandTimeout设长一点试试
如果是超时,应该能解决Top
5 楼jinjazz(近身剪)回复于 2004-08-03 17:11:41 得分 10
update as_record set
ac_record.entertime=b.maxtime,acrecord.leavetime=b.mintime
from (select uid,max(intime) as maxtime,min(intime) as mintime from
ent_rec where ent_rec.intime between ... and ... ) b
where a.staffid=b.uid
and a.datet between...and...Top
6 楼favan(SUPER.NET)回复于 2004-08-03 17:12:40 得分 0
我用出错的电脑上装的query analizer执行这个语句也不会出错,几十毫秒就执行玩了,为什么程序里执行不了这个语句?Top
7 楼favan(SUPER.NET)回复于 2004-08-03 17:13:49 得分 0
我已经设置成15秒了,不能再长了,这样一个语句就是几十毫秒的Top
8 楼jinjazz(近身剪)回复于 2004-08-03 17:15:31 得分 10
用上面的语句可能能快点Top
9 楼jinjazz(近身剪)回复于 2004-08-03 17:16:32 得分 10
那你干脆坐成存储过程好了Top
10 楼cronuz(cronus)回复于 2004-08-03 17:21:21 得分 10
hehe, 是会超时!
二個字段要分別用一個SELECT句、再加上本身的条件...
建義用存储过程来解決。
Top
11 楼favan(SUPER.NET)回复于 2004-08-03 17:31:38 得分 0
不能用存储过程,因为客户要求数据库有通用性Top
12 楼favan(SUPER.NET)回复于 2004-08-03 17:33:34 得分 0
再说就执行三个SELECT 也不至于超时的Top
13 楼jinjazz(近身剪)回复于 2004-08-03 17:33:42 得分 10
...这是什么道理啊,每种数据库支持的sql语法是不一样的,即使不作过程,换了数据库你的程序也没有多大移植性Top
14 楼Delphi78()回复于 2004-08-04 09:14:00 得分 10
你用什么方式连的数据库?
是BDE还是ADO,用的什么接口?
如果是ADO,升级一下看看
如果是BDE,建议用Query+UpdateSQL
你在程序执行的时间用监视器跟踪一下,看看执行的是直接的语句还是加了一大堆的动作Top
15 楼sousouwjh(sousouwjh)回复于 2004-08-04 09:23:34 得分 10
可以先创建存储过程执行后删除如何?Top
16 楼cronuz(cronus)回复于 2004-08-04 11:08:57 得分 10
一)対UPDATE自身的条件句↓、要控制条件、一次不要選中太多的記録。
WHERE ac_record.datet between '2004-8-3' and '2004-8-2'
二)対字段付値的条件句↓
where (ent_rec.inTime between ac_record.BeginTIme and ac_record.EndTime)
and (ent_rec.uID = ac_record.staffID)
建義対表「ent_rec」建索引文件、可加速捜査。
CREATE INDEX yourIndex ON ent_rec (inTime, uID)
Top
17 楼favan(SUPER.NET)回复于 2004-08-04 12:28:04 得分 0
jinjazz好像在软件工程模块活动的吧?Top




