在循环SQL查询中捕获错误

时间:2018-08-16 15:21:30

标签: sql tsql while-loop

我有以下插入查询,该查询从OriginalData表中选择所有内容均为nvarchar(max)的记录,并将其插入具有特定字段定义(即MainAccount为INT)的Temp表中。

我正在逐行插入,因为如果OriginalData表中有一条记录,其中MainAccount值为“ Test”,则显然会导致转换错误,并且插入将失败。

我希望能够捕获此错误。我要填充的原始数据表上有一个字段称为“错误”。但是,我希望此方法可以遍历整个表,以免因第一个错误而失败并停止。

DECLARE @RowId INT
, @MaxRowId INT  

Set @RowId = 1
Select @MaxRowId = 60 

WHILE(@RowId <= @MaxRowId)
BEGIN
INSERT INTO [Temp] (ExtractSource, MainAccount,RecordLevel1Code, RecordLevel2Code, RecordTypeNo, TransDate, Amount, PeriodCode, CompanyCode)

SELECT ExtractSource, MainAccount,RecordLevel1Code, RecordLevel2Code,RecordTypeNo,TransDate, Amount, PeriodCode, DataAreaId
FROM [OriginalData] 
WHERE RowId = @RowId

PRINT @RowId  
SET @RowId  = @RowId  + 1        
END
select * from [Temp]

1 个答案:

答案 0 :(得分:0)

您应该使用TRY..CATCH块:

WHILE(@RowId <= @MaxRowId)
BEGIN
  BEGIN TRY  
    INSERT INTO [Temp] (ExtractSource, MainAccount,RecordLevel1Code,
      RecordLevel2Code, RecordTypeNo, TransDate, Amount, PeriodCode, CompanyCode)
    SELECT ExtractSource, MainAccount,RecordLevel1Code, RecordLevel2Code,
       RecordTypeNo,TransDate, Amount, PeriodCode, DataAreaId
    FROM [OriginalData] 
    WHERE RowId = @RowId;

    PRINT @RowId;

  END TRY  
  BEGIN CATCH  
    -- error handlingg
  END CATCH 
  SET @RowId += 1;      
END