设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 公司 数据
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server中Try Catch处置异常的操作是什么

发布时间:2023-05-19 11:41 所属栏目:116 来源:互联网
导读:今天这篇我们来学习和了解SQL Server中Try Catch处理异常的操作是什么,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解SQL Server中Try Catch处理异常的操作是什么有一定的帮助。有这方面学习需要的朋友就继续往下看吧! 如何在 SQL Server 中使用 T
  今天这篇我们来学习和了解“SQL Server中Try Catch处理异常的操作是什么”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“SQL Server中Try Catch处理异常的操作是什么”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!
  如何在 SQL Server 中使用 Try Catch 处理错误?
  从 SQL Server 2005 开始,我们在TRY 和 CATCH块的帮助下提供了结构错误处理机制。使用TRY-CATCH的语法如下所示。
 
  BEGIN TRY
  --这里写可能导致错误的语句
  END TRY
  BEGIN CATCH
  --当错误发生后,这里的语句将会被执行
  END CATCH
  -- 其他语句
  有可能抛出异常的SQL 语句需要放在BEGIN TRY和END TRY块之间。如果在 TRY 块中发生异常,则控制权立即转移到相应的CATCH块。如果 TRY 块中没有发生异常,则直接跳过CATCH块,执行CATCH块之后的语句。
 
  注意:被 CATCH 捕获的错误不会返回给调用应用程序。如果要将错误信息返回给调用应用程序,则需要将 RAISERROR() 函数显式与 catch 块一起使用。在之前的文章中,我们讨论了如何使用 RAISERROR() 函数显式地引发错误。参考: SQL Server 中的异常处理
 
  示例:了解 SQL Server 中的 Try-Catch 实现。
  在下面的示例中,我们使用 SQL Server TRY CATCH 实现和用户定义的错误语句来创建一个用于除以 2 个变量值的存储过程。
 
  IF OBJECT_ID('spDivideTwoNumbers','P') IS NOT NULL
      DROP PROCEDURE spDivideTwoNumbers
  GO
  CREATE PROCEDURE spDivideTwoNumbers(
  @Number1 INT,
  @Number2 INT
  )
  AS
  BEGIN
    DECLARE @Result INT
    SET @Result = 0
    BEGIN TRY
      SET @Result = @Number1 / @Number2
      PRINT '结果是: ' + CAST(@Result AS VARCHAR)
    END TRY
    BEGIN CATCH
      PRINT '第二个数字不能为0'
    END CATCH
  END
  让我们来测试一下这个存储过程
 
  exec spDivideTwoNumbers 100,1
  输出: 结果是: 100
 
  exec spDivideTwoNumbers 100,0
  输出: 第二个数字不能为0
 
  当我们用正确的值执行上述存储过程时,程序就不会出现错误。这意味着在执行完 try 块中的所有语句后,控件直接跳转到存在于 catch 块之后的语句,而不执行 catch 块。
 
  如果在执行过程中,即在try块中发生任何错误,那么在这种情况下,从发生错误的行开始,控制权直接跳转到catch块。所以 try 块中的其余语句将不会执行,而 catch 块将执行。
 
  注意:在上面的程序中,当错误发生时,我们会显示一条用户自定义的错误消息“第二个数字不能为0”。
  ALTER PROCEDURE spDivideTwoNumbers(
  @Number1 INT,
  @Number2 INT
  )
  AS
  BEGIN
    DECLARE @Result INT
    SET @Result = 0
    BEGIN TRY
      SET @Result = @Number1 / @Number2
      PRINT '结果是: ' + CAST(@Result AS VARCHAR)
    END TRY
    BEGIN CATCH
      PRINT ERROR_MESSAGE()
    END CATCH
  END
  再次执行: exec spDivideTwoNumbers 100,0
  输出: 遇到以零作除数错误。
 
  ERROR_MESSAGE 是系统函数, 此函数返回导致 TRY...CATCH 构造的 CATCH 块执行的错误消息文本。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读