![](/img/trans.png)
[英]ROLLBACK TRANSACTION request has no corresponding 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.