我一直在做这个存储过程,但是当我执行存储过程时,我得到了一个无限执行。这导致僵局。
这是我得到的错误,有人可以帮我这个吗?感谢。
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
答案 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