2016-01-21 91 views
0

我不能強迫我的錯誤悲傷的臉上出現這個代碼。有人可以幫忙,我只是得到一個正常的錯誤信息,而不是捕獲的。我只是拿出一些代碼來強制錯誤是這樣的權利嘗試 - 趕上SQL

declare @Color Table 
(color char(12)) 

insert @Color 
Values('white'), 
('Red'), 
('black'), 
('yellow'); 

Declare @make Table 
(make char(12)) 

insert @make 
Values('Polo'), 
('Golf'), 
('A1'), 
('Metro'); 

Begin try 
Select * 
    From @Color Cross Join @make ; 
End Try  
Begin Catch 
    PRINT ';(' 
end catch 
    Print 'Done' 
+1

爲什麼你希望你的選擇查詢失敗?您提供的樣本完全有效。所以,因爲它不會失敗 - catch塊永遠不會被執行。 –

+0

'選擇*從@Color Cross加入@make;'是正常的正確查詢。 – lad2025

+0

這不是我想讓它失敗我試圖讓它無法測試catch工程,但如果我拿出一些代碼,我會得到正常的錯誤信息。我想知道爲什麼即使出現錯誤也不會捕捉到它? –

回答

0

我在SQL Server 2012中運行了你的摘錄,它根本沒有產生錯誤。我得到了16行的結果集。

下面是一些代碼,將捕獲的錯誤,告訴你哪裏出了問題:

DECLARE @Color TABLE 
(color char(12)); 

INSERT @Color 
VALUES('white'), 
('Red'), 
('black'), 
('yellow'); 

BEGIN TRY; 
    SELECT CAST(color AS int) 
     FROM @Color; 
END TRY 
BEGIN CATCH 
    SELECT ERROR_NUMBER() AS ErrorNumber, 
      ERROR_SEVERITY() AS ErrorSeverity, 
      ERROR_STATE() AS ErrorState, 
      ERROR_PROCEDURE() AS ErrorProcedure, 
      ERROR_LINE() AS ErrorLine, 
      ERROR_MESSAGE() AS ErrorMessage; 
END CATCH; 

輸出是:

Output of error handler

+0

謝謝我現在看到這個失敗了,因爲它不能使顏色變成數字,但代碼寫得很好,所以這是一個運行時錯誤。我懂了。非常感謝你 :) –