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