如何在SQL Server中引发自定义异常

5
我有一个存储过程spMyProc。该过程接受表名作为参数@TableName。在进入过程主体之前,验证表是否存在非常重要。
如果表名无效,您如何创建自定义异常来引发错误?
我知道TRYCATCH,但不确定如何将其与自定义异常组合使用。
谢谢。

哪个版本的SQL Server?在2012年,我们得到了一个新的THROW关键字.... - marc_s
1
很不幸2008年!我迫不及待地想要升级到2014年。 - Danny Rancher
1
你应该可以通过 RAISERROR 语句实现你想要的目标。 - marc_s
3个回答

6

请查看RAISERROR()函数。

TRY..CATCH的工作方式与其他编程语言中的相同。

BEGIN TRY

  -- do your checks 
      IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE NAME = @TableName)
       BEGIN
           RAISERROR('Table does not exist', 16,1)
       END

  -- rest of the code if  checks are passed 
  -- if above checks are not passed and you riase an error 
  -- control will skip any code in TRY Block after the error has been 
  -- Raised and staright jump to Catch block.

END TRY

BEGIN CATCH 
  -- Do your error logging 
  -- Other stuff 
  -- you have access to ERROR_ functions here to get detailed info about errors
END CATCH 

1

我认为这里提供的一个示例 RAISERROR 应该能够解决你的问题。SQL Server 的新版本将使用 THROW 代替 RAISERROR。


0

您可以使用try catch和raiseerror来处理自定义异常,例如:

begin try   
   --sql statements 
end try
begin catch
    RAISERROR 
    (
    ERROR_MESSAGE(), -- or add your custom message 
    ERROR_SEVERITY(), 
    1,               
    ERROR_NUMBER(),    -- parameter: original error number.
    ERROR_SEVERITY(),  -- parameter: original error severity.
    ERROR_STATE(),     -- parameter: original error state.
    ISNULL(ERROR_PROCEDURE(), '-'), -- parameter: original error procedure name.
    ERROR_LINE()       -- parameter: original error line number.
end catch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接