sql中的存储过程里怎么写事务回滚啊?

2025-05-23 06:05:11
推荐回答(4个)
回答1:

CREATE PROC [dbo].[notice_Delete] --- 同时删除该通知书和对应的节点
@tbl VARCHAR(30),
@pid INT
AS
BEGIN
DECLARE @tblname VARCHAR(30) ;
DECLARE @sql VARCHAR(1000) ;
SET @tblname = @tbl
SET @sql = 'delete ' + @tblname + ' where id ='
+ CONVERT(VARCHAR(10), @pid)

BEGIN TRAN --开始事务

EXEC ( @sql
)
IF ( @@rowcount = 0 ) --执行结果影响行数为0
BEGIN
ROLLBACK TRAN --回滚
END
ELSE
BEGIN
DELETE FROM tbl_treenotice
WHERE purposeid = @pid
IF ( @@rowcount = 0 ) --执行结果影响行数为0
BEGIN
ROLLBACK TRAN --回滚
END
ELSE
BEGIN
COMMIT TRAN --提交事务
END
END
END

回答2:

BEGIN TRAN
insert into [T_UserDealDetails](
[UserID],[DealTime],[DealType],[DetailMoney],[FormalitiesFees],[SchemeNumber],[RelatedUserID],[PayNumber],[PayBank],[Memo],[OperatorUserID],[AlipayID],[AlipayName],[TenpayID],[TenpayName]
)VALUES(
@UserID,@DealTime,1,@DetailMoney,@FormalitiesFees,@SchemeNumber,@RelatedUserID,@PayNumber,@PayBank,@Memo,@OperatorUserID,@AlipayID,@AlipayName,@TenpayID,@TenpayName)
update T_Users set Balance=@DetailMoney where T_Users.UserID=@UserID
--@@error 错误行数 --@@rowcount成功行数
IF(@@error<>0 OR @@rowcount<>1)
BEGIN
ROLLBACK TRAN
RETURN;
END
COMMIT;

回答3:

直接在存储过程结束之前添加以下代码:
EXCEPTION WHEN OTHERS THEN rollback;
解释:以上语句的意思是当出现任何错误的时候,直接回滚整个事务。
备注:存储过程中建议没有特殊需求的情况下,在执行结束之前不要进行commit,否则在中途提交,后面的代码保存,只能回滚到commit的位置。

回答4:

蒙蒙的~~