------解决方案-------------------- begin tran t1
exec p_1
if xxx/try catch
begin tran t2
exec p_2
if xxx/try catach
分别判断,成功就继续,不成功就分别回滚 ------解决方案-------------------- 事务都是要么提交 要么回滚 有什么问题?
你直接写在一个事务里面就可以了 实在是害怕的话 加上SER XACT_ABORT ON ------解决方案--------------------
你用一楼的吧 分别判断吧。 ------解决方案--------------------
CREATE PROC up_test1
AS
UPDATE tb1 SET field1 = 1
WHERE id = 1
EXEC up_test2
GO
CREATE PROC up_test2
AS
UPDATE tb2 SET field2 = 2
WHERE id = 2
GO
--显示声明事务,无论有多少代码,都放在begin tran和commit tran之间就好了.
--切记,不要嵌套事务。如果嵌套事务,异常时执行的第一个ROLLBACK语句会回滚所有的事务
--#1.在最外层用TRY...CATCH...
BEGIN TRY
BEGIN TRAN
EXEC up_test1
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
--#2.用SER XACT_ABORT ON环境选项
SET XACT_ABORT ON
BEGIN TRAN
EXEC up_test1
COMMIT TRAN
--#2.2000的话,用SER XACT_ABORT ON环境选项,就可以了
SET XACT_ABORT ON
BEGIN TRAN
EXEC up_test1
COMMIT TRAN
--参考:
http://bbs.csdn.net/topics/390133361 ------解决方案--------------------
--完整測試示例
--1)建立測試表
CREATE TABLE tb1 (id INT,field1 TINYINT)
INSERT tb1
SELECT 1,1
UNION ALL
SELECT 2,2
CREATE TABLE tb2 (id INT,field2 TINYINT)
INSERT tb2
SELECT 1,1
UNION ALL
SELECT 2,2
GO
--2)建立測試存儲過程
CREATE PROC [dbo].[up_test1]
AS
begin
d