2016-01-21 90 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

谢谢我现在看到这个失败了,因为它不能使颜色变成数字,但代码写得很好,所以这是一个运行时错误。我懂了。非常感谢你 :) –