Can';t在SQL Server存储过程中的try..catch块中使用throw或raiseerror

Can';t在SQL Server存储过程中的try..catch块中使用throw或raiseerror,sql,sql-server,sql-server-2008,tsql,stored-procedures,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

我有这个存储过程,由于某种原因,我不能使用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
我正在使用SQLServer2008R2

我不能调用函数
RAISEERROR
或使用
THROW
语句的原因是什么


提前谢谢

根据我的理解,应该如下所示

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
这样,如果发生错误,就不需要抛出任何异常。如果发生任何错误,控件将自动在捕捉块内移动



SQL Server 2008 R2中不存在THROW。它是在SQL Server 2012中引入的。它是
RAISERROR
,只有一个
E
@Dems:输入错误的正是RASERROR。非常感谢。无论如何,Sql Server 2012已经发布了吗?最终版本?我将不得不尽快建立并运行这个数据库。我现在在想,是否最好在2008年或2012年版本中安装他们的服务器。很容易记住Microsoft的元音短缺:
RaIsError
指的是太阳神boo boo。如果打印错误消息与发出错误消息根本不同,则打印错误消息。OP只需要将
RAISEERROR
替换为
RAISEERROR
@Dems-Sir,我排除了它,因为在发生错误的情况下,由于异常处理,控件将移动到catch块中。所以不需要。但是OP正在尝试重新抛出错误。我假定经过一些清理、日志记录或其他处理之后。@Dems-sir,如果是这样,那么就不需要像OP的查询中提到的那样进行异常处理。正如,在Catch块中使用了throw。我没有提到,但是如果错误发生在c#app端,我想捕获它。这就是为什么我没有尝试使用Print语句。我不确定,但我认为我没有将错误打印到应用程序中。我说得对吗?我之所以这样说,是因为我尝试了打印语句,但没有在应用程序端捕获错误。