碰到这样一个问题!大家帮我看看!谢谢

zhnzzy 2007-04-19 05:35:43
别人问我一个问题,说当要往主表和子表插入一条记录的时候主表里面的更新成功了,子表里面失败了,这时候怎么解决,我不会大家帮我看看!
ps:
我如果写了begin
update t1 set....
update t2 set....
end
这样,会发生只更新了t1,而t2没更新的情况吗?我以为只要插入的数据类型都符合就不会失败了呀!
...全文
248 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwl0606 2007-04-20
  • 打赏
  • 举报
回复
学习了,顶
bootupnow 2007-04-20
  • 打赏
  • 举报
回复
这种情况十分危险,可能破坏数据库的数据完整性,重要的数据最好使用事务控制。

declare iErrCode int
set iErrCode = -1 -- 用于捕获@@error的值
begin tran
update t1 set....
set iErrCode = @@error -- 成功 iErrCode = 0,否则iErrCode != 0

if @@iErrCode = 0
begin
update t2 set....
set iErrCode = @@error
end
.......

if @@iErrCode = 0
begin
commit tran
end
esle
begin
rollback tran
end
y_dong119 2007-04-20
  • 打赏
  • 举报
回复
//可执行事务

declare @@iErrCode int
set @@iErrCode = -1 -- 用于捕获@@error的值
begin tran

insert tb1(dasfdf,fasf) values(1909,2)
set @@iErrCode = @@error -- 成功 iErrCode = 0,否则iErrCode != 0

if @@iErrCode = 0
begin
insert tb1(dasfdf,fasf) values(22,23)
set @@iErrCode = @@error
end
if @@iErrCode = 0
begin
commit tran
end
else
begin
rollback tran
end

zg182 2007-04-20
  • 打赏
  • 举报
回复
BEGIN TRAN
BEGIN TRY
UPDATE t1 SET...
UPDATE t2 SET...
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF XACT_STATE()<>0
ROLLBACK TRANSACTION
END CATCH
第二种方式
zg182 2007-04-20
  • 打赏
  • 举报
回复
DECLARE @ERROR INT
SET @ERROR = 0



BEGIN TRAN
UPDATE t1 SET...
SET @ERROR=@@ERROR
IF @ERROR <> 0
GOTO ERR
UPDATE t2 SET...
SET @ERROR=@@ERROR
IF @ERROR <> 0
GOTO ERR

ERR:
IF @ERROR= 0
COMMIT TRANSACTION ;
ELSE
ROLLBACK TRANSACTION
WDBOY0000 2007-04-19
  • 打赏
  • 举报
回复
IF @@error <> 0
BEGIN

COMMIT TRANSACTION
END
ELSE
BEGIN

ROLLBACK TRANSACTION
END
zzxiaoma 2007-04-19
  • 打赏
  • 举报
回复
从程序里面控制
setautocommit()
update
update
setcommit()
gjylgmh 2007-04-19
  • 打赏
  • 举报
回复
用事务回滚

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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