嗨,我有一个sp,在那里我用的是尝试捕捉和事务。下面是代码
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
然后,我使用此代码在另一个查询窗口中运行这个sp。
EXEC UpdateCompany '002','003','TRAN1'
因此,在彼此使用此查询窗口后,我将尝试回滚以下事务:
DECLARE @TRAN VARCHAR(MAX)='TRAN1'
BEGIN TRAN @TRAN
ROLLBACK TRAN @TRAN
在这里,我们可以看到,我给了一些事务的名称,并试图用相同的名称回滚,但是它没有回滚。我在这里做错什么了吗??
发布于 2015-07-06 07:21:50
使用此链接了解事务的工作方式。
http://www.sqlservercurry.com/2011/01/rollback-transaction-in-sql-server.html发布于 2015-07-06 07:29:20
我用的是以下标准,也许能帮上忙:
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]
ENDhttps://stackoverflow.com/questions/31239700
复制相似问题