事务 goto 烦我几天

m54772091 2007-03-22 10:17:32
我用DEPHI 开发 AdoQuery
我的代码:
BEGIN TRANSACTION
DELETE FROM table1 if @@error<>0 goto WRONG
DELETE FROM table2 if @@error<>0 goto WRONG
...
COMMIT
WRONG: ROLLBACK

我用goto 目的是,如果有错误了就不要再处理后面的代码(量很大),直接跳到最后回滚

运行软件系统报错
我想是不是如果 commit 提交后 又要 ROOLBACL 所以报错 改了一下

DECLARE @bErrors as bit
BEGIN TRANSACTION SET @bErrors=0
DELETE FROM table1 if @@error<>0 begin set @bErrors=1 goto WRONG end
DELETE FROM table2 if @@error<>0 begin set @bErrors=1 goto WRONG end
...
COMMIT
WRONG: if @bErrors=1 ROLLBACK

在DEPHI 编译中报错 “不正常地定义了参数对象,提供了不一致或不完整的信息”

呵呵 ,我把代码拷贝到查询分析器里运行 一切正常???
...全文
218 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2007-03-25
  • 打赏
  • 举报
回复

set xact_abort on --加上这句,确保事务失败时整体回滚,因为严重错误用代码@@error是判断不到的

BEGIN TRANSACTION
WangZWang 2007-03-23
  • 打赏
  • 举报
回复
--如果没有返回值,最好使用adoCommand控件来执行命令,或者把你的语句写成一个
--存储过程


BEGIN TRANSACTION
DELETE FROM table1 if @@error<>0 goto WRONG
DELETE FROM table2 if @@error<>0 goto WRONG
.........
COMMIT
return
WRONG: ROLLBACK
baggio785 2007-03-23
  • 打赏
  • 举报
回复
是不是delphi调用出错?
中国风 2007-03-23
  • 打赏
  • 举报
回复

DECLARE @bErrors as bit
BEGIN TRANSACTION SET @bErrors=0
DELETE FROM table1 if @@error<>0 begin set @bErrors=1 goto WRONG end
DELETE FROM table2 if @@error<>0 begin set @bErrors=1 goto WRONG end
...
COMMIT
WRONG: if @bErrors=1
begin
ROLLBACK tran
return
end

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧