6

「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
4

4 に答える 4

6

トランザクションをコミットすると、ロールバックできなくなります。次のいずれかを実行します。

if(@rc1=0 or @rc2=0 or @rc3=0)
begin
  rollback transaction trans1
end else begin
  commit transaction trans1
end
于 2012-05-24T18:50:18.730 に答える
4

commit transaction trans1ロールバックの if ステートメントの直前にあります。カウントを確認する前に、トランザクションは常にコミットされます。

于 2012-05-24T18:47:55.777 に答える
1

は常にヒットしていると思いcommit transaction trans1ますので、その時点からロールバックすることはできません。

于 2012-05-24T18:48:47.140 に答える