Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQL Server中引发自定义异常_Sql Server_Sql Server 2008_Tsql_Exception - Fatal编程技术网

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

Sql server 如何在SQL Server中引发自定义异常,sql-server,sql-server-2008,tsql,exception,Sql Server,Sql Server 2008,Tsql,Exception,我有一个存储过程spMyProc。将表名作为参数@TableName传递给过程。在进入程序主体之前,验证表格是否存在非常重要 如果表名无效,如何创建自定义异常以引发错误 我知道TRY和CATCH但我不确定如何将其与自定义异常结合起来 尊敬。我认为这里提供的一个示例应该与您的问题相匹配。SQL Server的新版本将使用而不是RAISERROR。查看RAISERROR()函数 试试。。CATCH的工作原理与它在任何其他编程语言中的工作原理基本相同 BEGIN TRY -- do your c

我有一个存储过程
spMyProc
。将表名作为参数
@TableName
传递给过程。在进入程序主体之前,验证表格是否存在非常重要

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

我知道
TRY
CATCH
但我不确定如何将其与自定义异常结合起来


尊敬。

我认为这里提供的一个示例应该与您的问题相匹配。SQL Server的新版本将使用而不是RAISERROR。

查看RAISERROR()函数

试试。。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 

您可以使用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

哪个版本的SQL Server?在2012年,我们得到了一个新的
THROW
关键字……不幸的是,2008年!我迫不及待地想升级到2014年。你应该能够通过这份声明实现你想要的