如标题
现在有一批数据 通过while循环 一条一条的 处理
当然 在while 循环外面 有 事务 成功 提交 失败回滚
现在情况是 当处理每条的时候 碰到 整形溢出 字符串超长 字符串不能转为int 型的 错误
就立马回滚了 整批数据 都不能被 处理
想实现 其中一条数据出现 问题后 不让处理终了 记录下log 跳过这条数据 继续 处理下一条数据
求实现方法??
------解决思路----------------------
BREAK 跳出当前循环,继续下一次循环
------解决思路----------------------
不符合条件的先过滤出来然后再更新
------解决思路----------------------
看看这个列子 是不是你要的?
create table a (name varchar(10),id int identity(1,1))
insert into a values('1'),('2'),('3'),
('a'),('b'),('4'),('5'),('6'),('7')
declare @id int =1,@name int
while @id<=(select MAX(id) from a)
begin
begin try
select @name=CONVERT(int,name) from a where ID=@id
print @name
end try
begin catch
print ERROR_MESSAGE()
end catch
set @id=@id+1
end
--结果
1
2
3
在将 varchar 值 'a' 转换成数据类型 int 时失败。
在将 varchar 值 'b' 转换成数据类型 int 时失败。
4
5
6
7
------解决思路----------------------
你这个是批量导入吗,如果是,那么在程序中就进行各种检查,然后再一起导入
------解决思路----------------------
加个 TRY..CATCH 就可以继续了。
DECLARE @i int
SET @i = 0
WHILE @i<3
BEGIN
SET @i = @i+1
BEGIN TRY
PRINT '[DEBUG]START '+CONVERT(varchar(11),@i)
IF @i = 2
--模拟出错
SELECT CONVERT(int,'12345678901234567890')
ELSE
SELECT CONVERT(int,'1234567890')
PRINT '[DEBUG]COMPLITE '+CONVERT(varchar(11),@i)
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH
END
PRINT '[DEBUG]TOTAL '+CONVERT(varchar(11),@i)