如何在新查询窗口中回滚事务

时间:2015-07-06 07:11:31

标签: sql-server-2008

嗨我有一个sp我在其中使用try catch with transaction。下面是代码



USE [Securtimeweb2.1]
GO
/****** Object:  StoredProcedure [dbo].[UpdateCompany]    Script Date: 7/6/2015 12:14:27 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[UpdateCompany]
(
	
	@CompanyCode varchar(max),
	@NewCompCode varchar(max)=null,
	@TRANSVAL VARCHAR(MAX)
)
as	
BEGIN
	BEGIN TRY
	
	BEGIN TRAN @TRANSVAL
		update BranchMaster set CompanyCode=@NewCompCode Where CompanyCode=@CompanyCode
		COMMIT TRAN @TRANSVAL
		END TRY
		BEGIN CATCH
		 SELECT ERROR_MESSAGE() AS strMessage
         ROLLBACK TRAN @TRANSVAL
		END CATCH
	
	
END
&#13;
&#13;
&#13;

然后我使用此代码在另一个查询窗口中运行此sp

&#13;
&#13;
EXEC UpdateCompany '002','003','TRAN1'
&#13;
&#13;
&#13;

所以在另一个查询窗口中使用它后,我正在尝试回滚

的事务

&#13;
&#13;
DECLARE @TRAN VARCHAR(MAX)='TRAN1'
BEGIN TRAN @TRAN
ROLLBACK TRAN @TRAN
&#13;
&#13;
&#13;

所以在这里我们可以看到我为该事务指定了一些名称并尝试使用相同的名称进行回滚,但它没有得到回滚。 我在做错什么吗?

2 个答案:

答案 0 :(得分:0)

使用此链接了解交易的工作原理

http://www.sqlservercurry.com/2011/01/rollback-transaction-in-sql-server.html

答案 1 :(得分:0)

我使用以下标准,也许它可以帮助:

BEGIN TRAN
BEGIN TRY
    --YOUR SQL STATEMENTS 
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE() AS [STATUS]
    ROLLBACK TRAN
END CATCH
IF @@TRANCOUNT > 0
BEGIN
    COMMIT TRAN
    SELECT 'SUCCESS' AS [STATUS]
END