存储过程错误 - 事务计数不匹配

时间:2014-08-08 08:28:30

标签: sql sql-server stored-procedures

我一直在做这个存储过程,但是当我执行存储过程时,我得到了一个无限执行。这导致僵局。

这是我得到的错误,有人可以帮我这个吗?感谢。

  

EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配。先前的计数= 1,当前计数= 2.

代码:

ALTER PROCEDURE [dbo].[spMaterialReceivingCreateItemRequirements]
   @DomainSite nvarchar(8),
   @ItemNo nvarchar(18),
   @tReceiving_id integer,
   @SampleRequired integer,
   @UserName nvarchar(50)
AS
BEGIN
   Declare @ErrorNo integer = '',
           @New_JobNo integer,
           @Status nvarchar(50) = 'InProcess',
           @SPName nvarchar(max) = '',
           @intSampleNo integer =1,
           @ErrorMessage nvarchar(max) = ''

    begin transaction t1
    Begin try
        BEGIN
            --Generate 1 sample for item requirements
            set @SampleRequired = 1

            WHILE (@intSampleNo <= @SampleRequired)
            BEGIN
                insert into tItemRequirements
                   select 
                       domainSite, @tReceiving_id, @ItemNo,
                       WorkCenter, tStationsType_id,
                       tSpecTestParameters_descriptions_id,
                       --row_number() OVER (ORDER BY ID) AS CurrentSet,
                       1 AS CurrentSet,
                       @intSampleNo, 1, 'InComplete', getdate(), @UserName 
                   from 
                       tspectestparameters
                   where 
                       itemno = @ItemNo 

                set @intSampleNo = @intSampleNo +1
            end
        END
        END TRY
        Begin catch
             SELECT 
                 @ErrorNo = ERROR_NUMBER(),
                 @SPName = ERROR_PROCEDURE(),
                 @ErrorMessage = ERROR_MESSAGE();

                 rollback transaction t1
        end catch
END

1 个答案:

答案 0 :(得分:1)

BEGIN TRANSACTION t1

BEGIN TRY
    BEGIN
        --Generate 1 sample for item requirements
        SET @SampleRequired = 1

        WHILE (@intSampleNo <= @SampleRequired)
        BEGIN
            INSERT INTO tItemRequirements
            SELECT domainSite
                , @tReceiving_id
                , @ItemNo
                , WorkCenter
                , tStationsType_id
                , tSpecTestParameters_descriptions_id
                ,
                --row_number() OVER (ORDER BY ID) AS CurrentSet,
                1 AS CurrentSet
                , @intSampleNo
                , 1
                , 'InComplete'
                , getdate()
                , @UserName
            FROM tspectestparameters
            WHERE itemno = @ItemNo

            SET @intSampleNo = @intSampleNo + 1
        END
    END
COMMIT
END TRY

BEGIN CATCH
    SELECT @ErrorNo = ERROR_NUMBER()
        , @SPName = ERROR_PROCEDURE()
        , @ErrorMessage = ERROR_MESSAGE();

    ROLLBACK TRANSACTION t1
END CATCH