【发布时间】:2016-04-11 21:19:04
【问题描述】:
我们正在使用Try/Catch block 在我们的stored procedures 中处理Exceptions。在stored procedure 中,我特意制作了error 来检查exceptions 的处理方式。我写了一个stored procedure,如下所示,
CREATE PROCEDURE TEST
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
;WITH CTE
AS
(SELECT TOP 10 *
FROM student)
SELECT * FROM CTE
SELECT * INTO #VAL
FROM CTE
IF @@ERROR = 0
BEGIN
COMMIT TRAN;
END
END TRY
BEGIN CATCH
SELECT @@ERROR AS ERROR, ERROR_LINE() AS [Error Line], ERROR_MESSAGE() AS [Error Message]
ROLLBACK TRAN;
END CATCH
SET NOCOUNT OFF;
END
在上面的Stored procedure 中,我已经多次使用了CTE。我预计SQL-SERVER 将处理异常,但它没有。在执行上述stored Procedure 时,我得到了低于error
消息 208,级别 16,状态 1,过程测试,第 16 行
对象名称“CTE”无效。
消息 266,级别 16,状态 2,过程测试,第 16 行
EXECUTE 之后的事务计数表示不匹配的数量 BEGIN 和 COMMIT 语句。先前计数 = 1,当前计数 = 2。
为什么不处理异常?有人可以对此提出想法吗?
感谢您的帮助。
【问题讨论】:
标签: sql sql-server tsql exception-handling