InterBase中的Update问题。(50分)

  • 主题发起人 李啸林
  • 开始时间

李啸林

Unregistered / Unconfirmed
GUEST, unregistred user!
在ACCESS中这样的UPDATE语句是合法的。
UPDATE A,B SET A.FILED1='NEW'
WHERE A.ID=B.ID
请问在INTERBASE中怎样实现上面的更新操作。

另,我写了一个PROC来处理上述的操作,每次都死机。
下面是我写的PROC
CREATE PROCEDURE UPDATA_A
AS
DELECARE VARIBLE ID;
BEGIN
FOR SELECT ID
FORM B
INTO :ID
DO
UPDATE A SET FILED1='NEW' WHERE ID=:ID;
END

每一次运行都会死机(当然B表只有一条记录的时候是没问题的。)
可我的A表有7万条记录,B表有3万条记录。每次运行CPU的占用率都会达到100%。
注:我使用的机器:PIII 500,128M,WIN2000 SERVER,INTERBASE 5(INTERBASE6.5)
 
你的声明中ID怎么不定义变量类型?
 
谢谢你的指出。是我在这里写错了。

实际中的PROC中的ID是定义过的。

这个问题,我用DELPHI用循环方式解决了。可惜效率太低。
 
UPDATE A SET A.FILED1='NEW'
WHERE A.ID in (select B.ID from B)
 
回erickleung,
你的这个方法我也用过,速度非常非常慢,
用IN语句数据库扫描的次数=A表记录数*B表记录数
=7万*3万=21亿次.

我真不明白,为什么INTERBASE不支持
UPDATE A,B SET A.FILED1='NEW'
WHERE A.ID=B.ID 这样简单的语句。

 
多人接受答案了。
 
顶部