SqlServer 存储过程的事务
? ?注意:在事务当中不能再开始事务 ?ALTER PROCEDURE [dbo].[MyProcedure] ?? ??? ?@Flag?????????????? AS????? INT,????????? ? ?? ??? ?@Column1?? ??? ??? ?AS?? ???? VARCHAR(8),?? ??? ? ?? ??? ?@Column2?? ??? ??? ??? ?AS?? ??? ?VARCHAR(50),?? ? ?? ??? ?@Column3?? ??? ?AS?? ??? ?VARCHAR(50),?? ? ?? ??? ?@Column4?? ??? ??? ?AS?? ??? ?CHAR(10),?? ??? ? ?? ??? ?@Column5?? ??? ??? ?AS?? ???? TINYINT,?? ??? ? ?? ??? ?@Column6?? ??? ?AS?? ??? ?TINYINT,?? ??? ? ?? ??? ?@Column7?? ??? ?AS?? ??? ?NVARCHAR(20),?? ? ?? ??? ?@Column8?? ??? ??? ?AS?? ??? ?CHAR(2),?? ??? ? ?? ??? ?@Column9?? ??? ??? ?AS?? ??? ?NVARCHAR(50),?? ? ??????? @O_RETURN?? ??? ??? ?AS?? ??? ?INT?? ?OUTPUT AS BEGIN ??? SET NOCOUNT ON ?? ? BEGIN TRAN--------------------------开始事务 ?? ? ?? ??? ?UPDATE Table1 ?? ??? ?? SET Column2 = @Column2 ?? ??? ??? ?,Column3 = @Column3 ?? ??? ?WHERE Column1 = @Column1 ?? ??? ?IF @@ERROR <> 0 ?? ??? ??? ?GOTO errback ? ?? ? IF @Flag = 1 ?? ??? ?UPDATE Table2 ?? ??? ? SET Column2 = @Column2 ?? ??? ??? ?,Column3 = @Column3 ?? ??? ??? ?,Column4 =@Column4 ?? ??? ??? ?,Column5 =@Column5 ?? ??? ??? ?,Column6 =@Column6 ?? ??? ??? ?,Column7 = @Column7 ?? ??? ??? ?,Column8 = @Column8?? ? ?? ??? ??? ?,Column9 = @Column9 ?? ??? ?WHERE Column1 = @Column1 ?? ? ELSE ?? ??? ?UPDATE Table3 ?? ??? ? SET Column2 = @Column2 ?? ??? ??? ?,Column6 =@Column6 ?? ??? ?WHERE Column1 = @Column1 ?? ??? ?IF @@ERROR <> 0 ---------因为if else 当中语句只执行一个,所以判断放在外面 ?? ??? ??? ?GOTO errback ----------转到执行错误的语句去; ?? ??? ?UPDATE Table4 ?? ??? ?SET Column2 = @Column2 ?? ??? ?WHERE Column1 = @Column1 ?? ??? ?IF @@ERROR <> 0 ?? ??? ??? GOTO errback ?? ??????? COMMIT TRAN?? -- 提交事务 ?? ??? ?SET @O_RETURN = 0;--返回成功标志 ?? ??? ?RETURN? --必须 return 掉,否则会执行下面的 errback:当中的代码 ?? ??? ?errback: --处理错误 ?? ??? ??? ?ROLLBACK TRAN --回滚事务 ?? ??? ??? ?SET @O_RETURN= 1; ?? ??? ??? ?RETURN (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |