[英]MS sql 2008 try catch still throws exception
我整天擔心。 我的標簽很大-'20317302009001'。 Zlecenie是int列-因此比較zlecenie = @ label時sql會產生錯誤。 我試圖抓住它,但仍然收到消息:
消息248,級別16,狀態1,過程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
從您的代碼看來,您實際上並沒有真正使用zlecenie
作為數字,因此您可能需要先將其轉換為varchar
進行比較,如下所示:
if exists(select * from Rejestr_zuzycia_tkaniny where cast(zlecenie as varchar(20))=@label)
但是,如果以后確實需要將zlecenie
處理為數字(例如將其添加到某物),則可能需要使其成為bigint
而不是int
以容納較大的值。
MSDN在T-SQL中有關於TRY...CATCH
說法:
當以下幾種類型的錯誤與TRY…CATCH構造在相同的執行級別上發生時,CATCH塊將不對其進行處理:
- 編譯錯誤(例如語法錯誤)會阻止批處理運行。
- 在語句級重新編譯期間發生的錯誤,例如由於延遲的名稱解析而在編譯后發生的對象名稱解析錯誤。
我認為算術溢出錯誤可能屬於第二種情況,這可以解釋為什么CATCH
塊不處理它。 但是,我無法在其他地方得到任何佐證,因此我建議您不要只聽從我的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.