簡體   English   中英

ROLLBACK TRANSACTION請求在sql server中沒有相應的BEGIN TRANSACTION錯誤

[英]ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION error in sql server

我收到錯誤“ROLLBACK TRANSACTION請求沒有相應的BEGIN TRANSACTION”。 如果任何delete語句的行計數為零,我試圖回滾事務。 以下是我的代碼。 我究竟做錯了什么? 請幫忙

alter procedure delete_staff(@staffID varchar(10))
as
declare @tempvar varchar(50), @staffName varchar(50), @jobTitle varchar(50), @dept varchar(50)
begin transaction trans1
        declare @rc1 int
        declare @rc2 int
        declare @rc3 int
        select @tempvar = left(@staffID,1) from Staff
        delete from staff where staffID = @staffID
        set @rc1=@@rowcount
        delete from Login where userID = @staffID 
        set @rc2=@@rowcount
        begin
        if(@tempvar='S')
                begin
                delete from Specialist where specialistID = @staffID    
                set @rc3=@@rowcount
                end
        else if(@tempvar='H')
                begin
                delete from Helpdesk_Operator where helpdesk_OperatorID = @staffID
                set @rc3=@@rowcount
                end
        commit transaction trans1
        end
        if(@rc1=0 or @rc2=0 or @rc3=0)
        begin
        rollback transaction trans1
        end

如果提交事務,則無法進行回滾。 做一個或另一個:

if(@rc1=0 or @rc2=0 or @rc3=0)
begin
  rollback transaction trans1
end else begin
  commit transaction trans1
end

您已在if語句之前commit transaction trans1以進行回滾。 在您檢查計數之前,將始終提交交易。

如果您的事務在實際進入commit語句之前已經提交,則會發生這種情況。 您可以在'COMMIT TRANSACTION'語句之前給出條件'If(@@ TRANCOUNT> 0)'。

對於Eg:

 BEGIN TRANSACTION
  SELECT 0--Statements To Excecute
  ROLLBACK
  IF(@@TRANCOUNT>0)
  COMMIT TRANSACTION

要么

  BEGIN TRY
  BEGIN TRANSACTION
  SELECT 0 --Statements To Excecute     
  COMMIT TRANSACTION
  END TRY
  BEGIN CATCH
  IF(@@TRANCOUNT>0)
  ROLLBACK
  END CATCH

我相信commit transaction trans1總是被命中,因此您將無法從該點回滾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM