簡體   English   中英

MS SQL 2008嘗試捕獲仍然引發異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM