這段代碼有什麼問題。COMMIT TRANSACTION請求沒有相應的BEGIN TRANSACTION
當過程中出現一些異常時,會發出此錯誤The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
。我該如何解決它?
BEGIN
BEGIN TRANSACTION
DECLARE
@Id bigint
,@Month nvarchar(100)
,@Year nvarchar(100)
,@CountryofExport nvarchar(100)
,@CountryofOrigin nvarchar(100)
,@HSCode nvarchar(100)
,@Unit nvarchar(100)
,@Quantity nvarchar(100)
,@CustomValue nvarchar(255)
,@Type nvarchar(100)
,@TypeBit bit
,@CountryofExportID int
,@CountryofOriginID int
,@MeasurementId int
,@Remarks nvarchar(500)
,@CommodityId int
,@SDate nvarchar(100)
,@SameRec int
,@counts int
DECLARE @Cursor_TradeFlow CURSOR
SET @Cursor_TradeFlow = CURSOR FOR
SELECT [Id],[Months],[Years],[CountryofExport],[CountryofOrigin],[HSCode],[Quantity],[Unit],[CustomValue],[Type] FROM [Temp_Trading]
OPEN @Cursor_TradeFlow
FETCH NEXT FROM @Cursor_TradeFlow INTO @Id, @Month, @Year, @CountryofExport, @CountryofOrigin, @HSCode,@Quantity, @Unit, @CustomValue, @Type
WHILE @@FETCH_STATUS = 0
BEGIN
Set @Remarks='';
Declare @EICountry varchar(100),
@Checkbit bit,
@CheckYearIsNumeric bit,
@CheckMonthIsNumeric bit
BEGIN TRY
SET @CheckMonthIsNumeric= convert(INT, @Month);
END TRY
BEGIN CATCH
begin
set @Checkbit=1;
set @Remarks = @Remarks + 'Invalid Month'
set @CheckMonthIsNumeric=1
end
END CATCH
BEGIN TRY
set @CheckYearIsNumeric= convert(INT, @Year);
END TRY
BEGIN CATCH
SET @CheckYearIsNumeric= 1;
set @Checkbit=1;
set @Remarks = @Remarks + 'Invalid Year'
END CATCH
Set @SameRec = (Select COUNT(*) From TradeFlow Where int_Month = @CheckMonthIsNumeric and int_Year = @CheckYearIsNumeric
and int_OriginLocationId = @CountryofExportID and int_DestinationLocationId = @CountryofOriginID and int_CommodityId = @CommodityId
and int_MeasurementId = @MeasurementId)
IF @@ERROR <> 0
BEGIN
ROLLBACK
END
FETCH NEXT FROM @Cursor_TradeFlow INTO @Id, @Month, @Year, @CountryofExport, @CountryofOrigin, @HSCode,@Quantity, @Unit, @CustomValue, @Type
END
CLOSE @Cursor_TradeFlow
DEALLOCATE @Cursor_TradeFlow
COMMIT
END
請出示所有相關的代碼。你的代碼不包含'COMMIT TRANSACTION' –
你已經在幾個地方使用了Try/Catch,有什麼理由不使用它而不是@@ Error?例如,圍繞整個循環進行的全局try/catch(而不是當前的@@錯誤檢查)對於您的問題將是一個簡單的解決方案 - 任何意外問題都會使整個事情回滾。 – Tao
爲什麼你使用遊標? – HLGEM