我有一个从表中获取数据并将其插入临时表的过程。然后该过程在 while 循环中一一验证。
例如:我有 50 行,第一行失败。在这种情况下,我希望程序继续处理剩余的 49 行。
我在插入语句中强制出错,并且我把它放在它下面,@@error <> 0
但没有进入 if 块。
但是过程结束并且不会继续执行下一个要执行的语句。
我正在从查询分析器运行该过程,并使用 print 'line 1' 等放置消息。
谢谢您的帮助。
这是一个类似的例子
create procedure procx
as
declare
@ind_max int,
@ind int,
@var_id int,
@var_name varchar(3)
declare @table_x table
(
row_id int identity(1,1),
id_x int,
name_x varchar(25),
status_x int
)
insert into @table_x values(1, 'xxx', 0)
insert into @table_x values(2, 'yyy', 0)
insert into @table_x values(3, 'zzz', 0)
set @ind_max = 3
set @ind = 1
while (@ind <= @ind_max)
begin
print 'line 1'
select @var_id = id_x ,
@var_name = name_x
from @table_x
where row_id = @ind
-- Forced error id_x is int field
-- Doesn't show line2, line3 ...
-- Msg 245, Level 16, State 1, Procedure procx, Line 160
-- Syntax error converting the varchar value 'A' to a column of data type int.
insert into test ( id_x , name_x )
values ( 'A' , @var_name )
if @@error != 0
begin
print 'line 2'
goto next_row
insert into log_test values(@var_id, 'Error')
end
print 'line 3'
update @table_x
set status_x = 1
where row_id = @ind
print 'line 4'
next_row:
set @ind = @ind + 1
end
print 'line 5'