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

时间:2014-09-29 15:51:47

标签: sql-server sql-server-2008 tsql exception

我有一个存储过程spMyProc。该过程以表名作为参数@TableName传递。在继续执行过程主体之前验证表是否存在是很重要的。

如果表名无效,如何创建自定义异常以引发错误?

我知道TRYCATCH,但我不确定如何将其与自定义例外结合在一起。

问候。

3 个答案:

答案 0 :(得分:3)

了解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 :(得分:1)

我认为此处提供的示例之一RAISERROR应与您的问题相符。新版本的SQL Server将使用THROW而不是RAISERROR。

答案 2 :(得分: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