求助:存储过程插入重复键错误为何未能捕获
各位高手,我在delphi中用ado执行存储过程,代码简化如下:
try
con1.BeginTrans;
aq1.SQL.Text:='exec test';
aq1.ExecSQL;
con1.CommitTrans;
ShowMessage('成功!');
except
ShowMessage('错误!');
con1.RollbackTrans;
end;
存储过程如下:
CREATE PROCEDURE test AS
SET XACT_ABORT ON
update duowdkc set kucsl=kucsl+10
insert into yewdj(danjbh) values ('JHD001201307300011')
现在的问题是,该存储过程中第一句执行成功,第二句失败,因为插入了重复键导致回滚了。
那么在我的delphi里,是捕获不到回滚的,程序依然显示“成功”。
另外,如果我把第一句去掉,只留第二句,那么错误就捕获到了。
到底应该怎么办?是存储过程的问题还是delphi的问题,我需要改哪里?
[解决办法]
追问一下,应该避免出现键号值重复的情况。
而且应该是在提交之间预先就判断的,而不是在保存时才发现报错。
可以通过一个存储过程求不重复的键值。存储过程内,用事务提交和回滚,来控制并发读取。