捕获错误的样本代码
BEGIN TRY
EXECUTE Abc
END TRY
BEGIN CATCH
print Error got
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH;
若您做了以下操作,这不会有效 。
CREATE PROC test
AS
BEGIN TRY
SELECT * FROM NonexistentTable
END TRY
BEGIN CATCH
-- some code
END CATCH
唯一可行的方法是 如果有一个存储程序, 叫做另一个存储程序, 这样的程序 :
CREATE PROC Test
AS
SELECT * FROM NonexistentTable
GO
CREATE PROC test2
AS
BEGIN TRY
EXECUTE Test
END TRY
BEGIN CATCH
-- some code
END CATCH
GO
TRY...CATCH的构造没有困住以下条件:
严重程度为10或10以下的警告或信息信息。
严重性为 20 或 20 以上的错误, 阻止 SQL 服务器数据库引擎任务处理会话。 如果发生严重性为 20 或 20 以上的错误, 数据库连接没有中断, TRY...CATCH 将处理错误 。
注意问题,如客户间断请求或客户断绝联系。
当使用死亡说明由系统管理员结束会话时。
下列类型的错误在与TRY.CATCH建造的相同执行水平发生时,不由CATCH区块处理:
- Compile errors, such as syntax errors, that prevent a batch from running.
- Errors that occur during statement-level recompilation, such as object name resolution errors that occur after compilation because of deferred name resolution.