嗨我有一个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;
然后我使用此代码在另一个查询窗口中运行此sp
EXEC UpdateCompany '002','003','TRAN1'
&#13;
所以在另一个查询窗口中使用它后,我正在尝试回滚
的事务
DECLARE @TRAN VARCHAR(MAX)='TRAN1'
BEGIN TRAN @TRAN
ROLLBACK TRAN @TRAN
&#13;
所以在这里我们可以看到我为该事务指定了一些名称并尝试使用相同的名称进行回滚,但它没有得到回滚。 我在做错什么吗?
答案 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