我有以下插入查询,该查询从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]
答案 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