处理数据之后的结果不能满足,怎么会到更新之前??????

renfengliu456 2008-09-17 03:39:02
我有一个类试的存储,用于更新,我想问的是更新的结果不能满足条件我应该怎么回到更新之前?????
CREATE procedure SBP_zz_hyzlxg
@gzid char(20),@djlxbs char(3)
as
declare @errcode integer
set @errcode=2210


declare @return integer
set @return=0


declare @tran_point int
set @tran_point=@@trancount
if @tran_point=0
begin tran tran_phtz
else
save tran tran_phtz

update spkfjc set kcshl=kcshl-@kcshl where spid=@spid
--这个地方的条件改变有很多上面只是一个小部分

----我的问题是要是我的更新的结果不能满足我的条件我应该怎么返回更新之前??????????????????????????


if @tran_point=0
commit tran tran_phtz
goto return_lab

err_lab:
if @return<10 set @return=@errcode +@return
rollback tran tran_phtz

return_lab:
return @return
GO
...全文
176 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garnett_KG 2008-09-19
  • 打赏
  • 举报
回复

回到更新之前就是用Rollback Tran做.

但你要说清是 什么是你所谓的"中间情况"啊!!!
renfengliu456 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hery2002 的回复:]
整个用一个事务处理,
如果出现异常就全部回滚.
[/Quote]
一个事务有办法判断中间的情况吗???我不可能说一个总的事务处理完了,再判断吧!!!
renfengliu456 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Garnett_KG 的回复:]
引用 2 楼 renfengliu456 的回复:
比如我的条件为kcshl <>1
我想问的是这个kcshl是更新之前的还是更新之后的???



在这里判断不了.

但可以在 Trigger中可以用inserted、deleted两个虚表来判断。
[/Quote]
主要是我的程序里面不适合用触发器

Garnett_KG 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 renfengliu456 的回复:]
比如我的条件为kcshl <>1
我想问的是这个kcshl是更新之前的还是更新之后的???

[/Quote]

在这里判断不了.

但可以在 Trigger中可以用inserted、deleted两个虚表来判断。

hery2002 2008-09-18
  • 打赏
  • 举报
回复
整个用一个事务处理,
如果出现异常就全部回滚.
renfengliu456 2008-09-18
  • 打赏
  • 举报
回复
要是我在我的更新后的条件的前面加事务保存点可以吗????
ilovewalk 2008-09-18
  • 打赏
  • 举报
回复
SET XACT_ABORT ON
UPDATE...
renfengliu456 2008-09-17
  • 打赏
  • 举报
回复
主要是哪个改变表的语句有很多我看不清楚!!!
我想问的是要是我哪个是更新之后的条件怎么处理????
Garnett_KG 2008-09-17
  • 打赏
  • 举报
回复


这样的条件?

好像你更应该放在UPDATE语句里面.

update spkfjc set kcshl=kcshl-@kcshl where spid=@spid AND kcshl-@kcshl=1


renfengliu456 2008-09-17
  • 打赏
  • 举报
回复
比如我的条件为kcshl<>1
我想问的是这个kcshl是更新之前的还是更新之后的???
Garnett_KG 2008-09-17
  • 打赏
  • 举报
回复



CREATE procedure SBP_zz_hyzlxg
@gzid char(20),@djlxbs char(3)
as
declare @errcode integer
set @errcode=2210
declare @return integer
set @return=0

BEGIN TRAN
update spkfjc set kcshl=kcshl-@kcshl where spid=@spid
--这个地方的条件改变有很多上面只是一个小部分
----我的问题是要是我的更新的结果不能满足我的条件我应该怎么返回更新之前??????????????????????????
IF 你的条件不能满足
ROLLBACK TRAN
ELSE
COMMIT TRAN
END
goto return_lab
err_lab:
if @return<10
set @return=@errcode +@return
return_lab:
return @return
GO


34,838

社区成员

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

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