Msg 248,Level 16,State 1,Procedure label_check,第9行 varchar值'20317302009001'的转换溢出了一个int列。 谁知道答案? 谢谢!
begin TRY
if (@komponent is null) and ISNUMERIC(@label)=1
begin
set @komponent=null
if exists(select * from Rejestr_zuzycia_tkaniny where zlecenie=@label)
begin
declare @program int;
select @program=program from Rejestr_zuzycia_tkaniny where zlecenie=@label
select @komponent=komponent from Komponenty_programu where program=@program
end;
end;
end TRY
begin CATCH
set @komponent=null
end CATCH
答案 0 :(得分:0)
从您的代码中看起来您实际上并未使用zlecenie
作为数字,因此您可能希望通过首先将其作为varchar
进行比较来进行比较:
if exists(select * from Rejestr_zuzycia_tkaniny where cast(zlecenie as varchar(20))=@label)
但是,如果您确实需要稍后处理zlecenie
作为数字,例如将其添加到某个内容中,然后您可能希望将其设为bigint
而不是int
以适应较大的值。
TRY...CATCH
说了一遍:
当CATCH块与TRY ... CATCH构造处于相同的执行级别时,它们不会处理以下类型的错误:
- 编译阻止批处理运行的错误,例如语法错误。
- 语句级重新编译期间发生的错误,例如由于延迟名称解析而在编译后发生的对象名称解析错误。
我认为算术溢出错误可能属于第二种情况,这可以解释为什么CATCH
块无法处理它。但是,我无法在其他地方得到任何佐证,所以我建议你不要只听我的话。