【发布时间】:2019-01-23 14:48:22
【问题描述】:
我有下面的插入查询,它从 OriginalData 表中选择记录,其中所有内容都是 nvarchar(max),并将其插入到具有特定字段定义的 Temp 表中,即 MainAccount 是 INT。
我正在逐行插入,因为如果 OriginalData 表中有一条 MainAccount 值为“Test”的记录,则显然会导致转换错误并且插入将失败。
我希望能够捕获此错误。 originalData 表上有一个我想填充的名为“error”的字段。但是我希望它在整个表中运行,而不是在第一个错误时失败并停止。
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]
【问题讨论】:
-
... where RowId = @RowId and MainAccount != 'Test'会从可预测的来源减少错误吗?您的catch块中将进行多少分析以确定异常的实际原因?
标签: sql tsql while-loop