在SQL Server存储过程中的try..catch块中不能使用throw或raiseerror

时间:2012-07-04 15:37:15

标签: sql sql-server sql-server-2008 tsql stored-procedures

我有这个存储过程,因为某些原因我不能使用Throw或RAISEERROR。我不得不说我是SQL Server的新手,我之前从未使用过这个语句,但出于某种原因,当我输入它们时不会变成蓝色。

ALTER PROCEDURE [dbo].[del_pay_plan_proc]
@id INT
AS
BEGIN TRANSACTION
BEGIN TRY

DELETE FROM test_table WHERE [Id] = @id;

COMMIT TRANSACTION;
END TRY
BEGIN CATCH

THROW

END CATCH

我使用的是SQL Server 2008 R2。

我无法调用函数RAISEERROR或使用THROW语句的原因是什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

根据我的理解,它应该如下......

ALTER PROCEDURE [dbo].[del_pay_plan_proc]
@id INT
AS
Begin Try
    SET NOCOUNT ON
    SET XACT_ABORT ON
    Begin Tran
         DELETE FROM test_table WHERE [Id] = @id;
         Select '' Msg
    Commit Tran
End Try

Begin Catch
    RollBack Tran
    Select Error_Message() as Msg
End Catch

通过这样做,如果发生错误,则不需要抛出任何异常。如果发生任何错误,控制将自动在Catch块内移动。


<强> Reference from here