【发布时间】:2013-03-27 09:23:12
【问题描述】:
我有一个存储过程,它正在从我们的数据库中不存在的Entity 表中选择条目。
在下面的代码中,如果我执行存储过程,它不会进入 catch 块,而对于 try 块中的每个错误,它应该自动进入 catch 块。
我无法理解原因
Create PROCEDURE AddUpdateEntity
(@Name VARCHAR(20),
@Age SMALLINT)
AS
BEGIN TRY
SELECT NAME, Age FROM Entity WHERE NAME = @name AND Age = @Age
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() StatusCode, ERROR_MESSAGE() [Message]
END CATCH
GO
/* Command to execute the SP */
EXEC AddUpdateEntity 'Sandeep',20
此执行语句显示错误“无效的实体对象”但未调用 catch 块。
存储过程已崩溃并显示消息
消息 208,级别 16,状态 1,过程 AddUpdateEntity,第 10 行
Nom d'objet 'Entity' 无效。
【问题讨论】:
-
错误是否在您的 TRY 块之外?仅当错误发生在您的
SELECT中时才会调用 catch 块 -
由于
table本身不存在,因此代码不会编译。因此catch block不会执行
标签: sql-server sql-server-2008