广告
返回顶部
首页 > 资讯 > 精选 >在SQL Server中如何使用Try Catch处理异常
  • 411
分享到

在SQL Server中如何使用Try Catch处理异常

2023-07-02 18:07:19 411人浏览 独家记忆
摘要

今天小编给大家分享一下在sql Server中如何使用Try Catch处理异常的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面

今天小编给大家分享一下在sql Server中如何使用Try Catch处理异常的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

如何在 SQL Server 中使用 Try Catch 处理错误?

从 SQL Server 2005 开始,我们在TRY 和 CATCH块的帮助下提供了结构错误处理机制。使用TRY-CATCH的语法如下所示。

BEGIN TRY--这里写可能导致错误的语句END TRYBEGIN CATCH--当错误发生后,这里的语句将会被执行END CATCH-- 其他语句

有可能抛出异常的SQL 语句需要放在BEGIN TRY和END TRY块之间。如果在 TRY 块中发生异常,则控制权立即转移到相应的CATCH块。如果 TRY 块中没有发生异常,则直接跳过CATCH块,执行CATCH块之后的语句。

注意:被 CATCH 捕获的错误不会返回给调用应用程序。如果要将错误信息返回给调用应用程序,则需要将 RaiSERROR() 函数显式与 catch 块一起使用。在之前的文章中,我们讨论了如何使用 RAISERROR() 函数显式地引发错误。

示例:了解 SQL Server 中的 Try-Catch 实现。

在下面的示例中,我们使用 SQL Server TRY CATCH 实现和用户定义的错误语句来创建一个用于除以 2 个变量值的存储过程。

IF OBJECT_ID('spDivideTwoNumbers','P') IS NOT NULL    DROP PROCEDURE spDivideTwoNumbersGoCREATE PROCEDURE spDivideTwoNumbers(@Number1 INT, @Number2 INT)ASBEGIN  DECLARE @Result INT  SET @Result = 0  BEGIN TRY    SET @Result = @Number1 / @Number2    PRINT '结果是: ' + CAST(@Result AS VARCHAR)  END TRY  BEGIN CATCH    PRINT '第二个数字不能为0'  END CATCHEND

让我们来测试一下这个存储过程

exec spDivideTwoNumbers 100,1

输出: 结果是: 100

exec spDivideTwoNumbers 100,0

输出: 第二个数字不能为0

当我们用正确的值执行上述存储过程时,程序就不会出现错误。这意味着在执行完 try 块中的所有语句后,控件直接跳转到存在于 catch 块之后的语句,而不执行 catch 块。

如果在执行过程中,即在try块中发生任何错误,那么在这种情况下,从发生错误的行开始,控制权直接跳转到catch块。所以 try 块中的其余语句将不会执行,而 catch 块将执行。

注意:在上面的程序中,当错误发生时,我们会显示一条用户自定义的错误消息“第二个数字不能为0”。然而,我们还可以通过调用函数 Error_Message 来显示原始错误消息。为了测试这个重写catch块内的代码如下

ALTER PROCEDURE spDivideTwoNumbers(@Number1 INT, @Number2 INT)ASBEGIN  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 CATCHEND

再次执行: exec spDivideTwoNumbers 100,0
输出: 遇到以零作除数错误。

ERROR_MESSAGE 是系统函数, 此函数返回导致 TRY...CATCH 构造的 CATCH 块执行的错误消息文本。

在 SQL Server 中使用 try-catch 的示例

我们将使用下面的 Product 和 ProductSales 表来了解如何使用 RaiseError 和 @ERROR 系统定义函数来处理 SQL Server 中的错误。

Product (产品表)

ProductIDNamePriceQuantity
101Laptop15000100
102Desktop20000150
104Mobile3000200
105Tablet4000250

ProductSales (产品销售表)

ProductSalesIDProductIDQuantitySold
110110
210215
310430
410535

请使用以下 SQL 脚本创建并使用示例数据填充 Product 和 ProductSales 表。

IF OBJECT_ID('dbo.Product','U') IS NOT NULL    DROP TABLE dbo.ProductIF OBJECT_ID('dbo.ProductSales','U') IS NOT NULL    DROP TABLE dbo.ProductSalesGOCREATE TABLE Product(  ProductID INT PRIMARY KEY,   Name VARCHAR(40),   Price INT,  Quantity INT )GOINSERT INTO Product VALUES(101, 'Laptop', 15000, 100)INSERT INTO Product VALUES(102, 'Desktop', 20000, 150)INSERT INTO Product VALUES(103, 'Mobile', 3000, 200)INSERT INTO Product VALUES(104, 'Tablet', 4000, 250)GOCREATE TABLE ProductSales(  ProductSalesId INT PRIMARY KEY,  ProductId INT,  QuantitySold INT) GOINSERT INTO ProductSales VALUES(1, 101, 10)INSERT INTO ProductSales VALUES(2, 102, 15)INSERT INTO ProductSales VALUES(3, 103, 30)INSERT INTO ProductSales VALUES(4, 104, 35)GO

在 SQL Server 中使用 TRY Catch 实现产品销售的存储过程

CREATE PROCEDURE spSellProduct@ProductID INT,@QuantityToSell INTASBEGIN  -- 首先我们需要检查待销售产品的可用库存  DECLARE @StockAvailable INT  SELECT @StockAvailable = QuantityAvailable FROM Product WHERE ProductId = @ProductId    --如果可用库存小于要销售的数量,抛出错误  IF(@StockAvailable< @QuantityToSell)  BEGIN    Raiserror('可用库存不足',16,1)  END    -- 如果可用库存充足  ELSE  BEGIN    BEGIN TRY      -- 我们需要开启一个事务      BEGIN TRANSACTioN      -- 首先做减库存操作      UPDATE Product SET Quantity = (Quantity - @QuantityToSell) WHERE ProductID = @ProductID      -- 计算当前最大的产品销售ID,即 MaxProductSalesId      DECLARE @MaxProductSalesId INT      SELECT @MaxProductSalesId = CASE           WHEN  MAX(ProductSalesId) IS NULL THEN 0           ELSE MAX(ProductSalesId)           END       FROM ProductSales      -- 把 @MaxProductSalesId 加一, 所以我们会避免主键冲突       --(解释下,建表的时候,没有设置主键自增,所以需要人工处理自增)      Set @MaxProductSalesId = @MaxProductSalesId + 1      -- 把销售的产品数量记录到ProductSales表中      INSERT INTO ProductSales VALUES (@MaxProductSalesId, @ProductId, @QuantityToSell)      -- 最后,提交事务      COMMIT TRANSACTION    END TRY    BEGIN CATCH      -- 如果发生了异常,回滚事务      ROLLBACK TRANSACTION      -- 输出错误详情      SELECT ERROR_NUMBER() as ErrorNumber,          ERROR_MESSAGE() as ErrORMessage,          ERROR_PROCEDURE() as ErrorProcedure,          ERROR_STATE() as ErrorState,          ERROR_SEVERITY() as ErrorSeverity,          ERROR_LINE() as ErrorLine    END CATCH  EndEND

在存储过程 spSellProduct 中,Begin Transaction 和 Commit Transaction 语句被包装在 Begin Try 和 End Try 块之间。如果包含在 BEGIN TRY 和 END TRY 块中的代码没有发生错误,则执行 COMMIT TRANSACTION 语句并将更改永久保存到数据库

如果在 try 块中发生错误,则立即跳转到 CATCH 块,并且在 CATCH 块中,我们正在回滚事务。因此,使用 Try/Catch 构造处理错误比使用 SQL Server 中的 @@Error 系统函数要容易得多。

SQL Server 还提供了一些我们可以在 CATCH 块范围内使用的内置函数,这些函数用于检索有关发生的错误的更多信息,如果这些函数在 CATCH 块范围之外执行,它们将返回 NULL。

注意:我们不能在用户定义的函数中使用 TRY/CATCH

以上就是“在SQL Server中如何使用Try Catch处理异常”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: 在SQL Server中如何使用Try Catch处理异常

本文链接: https://www.lsjlt.com/news/343583.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在SQL Server中如何使用Try Catch处理异常
    今天小编给大家分享一下在SQL Server中如何使用Try Catch处理异常的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2023-07-02
  • 在SQL Server中使用 Try Catch 处理异常的示例详解
    目录如何在 SQL Server 中使用 Try Catch 处理错误?示例:了解 SQL Server 中的 Try-Catch 实现。在 SQL Server 中使用 try-catch 的示例如何在 SQL Ser...
    99+
    2022-07-14
    SQL Server 使用 Try Catch 处理异常 SQL Server 处理异常
  • 在SQL Server中使用 Try Catch 处理异常的示例详解
    目录如何在 SQL Server 中使用 Try Catch 处理错误?示例:了解 SQL Server 中的 Try-Catch 实现。在 SQL Server 中使用 try-c...
    99+
    2022-11-13
  • Java中try catch如何处理异常
    这篇文章主要介绍Java中try catch如何处理异常,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 描述说明:public class TryCatchStu { 实例代码:&nbs...
    99+
    2023-06-21
  • 如何使用JavaScript中的try catch throw处理异常
    这篇文章主要为大家展示了“如何使用JavaScript中的try catch throw处理异常”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用JavaS...
    99+
    2022-10-19
  • js中的异常处理try...catch使用介绍
    在JavaScript可以使用try...catch来进行异常处理。例如: 复制代码 代码如下: try { foo.bar();} catch (e) { alert(e.name...
    99+
    2022-11-15
    异常处理 try catch
  • Java异常处理try catch的基本使用
    目录1. 异常1.1 try…catch异常处理1.2 多catch并行处理1.3 throw和throws 关键字的使用1.4 finally代码块1.5 Runti...
    99+
    2022-11-13
  • 为什么不使用try-catch-finally处理Java异常
    本篇内容主要讲解“为什么不使用try-catch-finally处理Java异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么不使用try-catch-finally处理Java异常”吧!...
    99+
    2023-06-15
  • Java深入讲解异常处理try catch的使用
    目录1.try-catch异常处理说明2.try-catch异常处理细节示例01测试结果01示例02测试结果021.try-catch异常处理说明 Java提供try和catch块来...
    99+
    2022-11-13
  • 如何在java中使用catch处理异常
    本文章向大家介绍如何在java中使用catch处理异常,主要包括如何在java中使用catch处理异常的使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1...
    99+
    2023-06-06
  • 如何在python中使用try-except方法处理异常
    这篇文章给大家介绍如何在python中使用try-except方法处理异常,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;...
    99+
    2023-06-14
  • 如何在PHP中使用异常处理函数
    PHP是一种流行的服务器端编程语言,它提供了一系列异常处理函数来处理代码中可能出现的错误。异常处理函数在代码出现问题时可以快速诊断错误并提供有效的错误提示,因此它们是PHP开发过程中非常重要的一部分。在本文中,我们将介绍PHP中的异常处理函...
    99+
    2023-05-19
    PHP异常处理 trycatch语句 抛出异常
  • C#中如何使用异常策略处理异常
    C#中如何使用异常策略处理异常,需要具体代码示例在C#开发中,异常处理是一项非常重要的任务。合理的异常处理可以提高程序的健壮性和可维护性,同时也能够帮助我们更好地追踪和修复bug。本文将介绍C#中如何使用异常策略来处理异常,并给出具体的代码...
    99+
    2023-10-22
    C#编程 C#关键词:异常处理 异常策略
  • 如何在Python中使用Selenium对异常进行处理
    这篇文章主要介绍了如何在Python中使用Selenium对异常进行处理,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对...
    99+
    2023-06-06
  • C#中如何使用异常过滤器和异常处理
    C#中如何使用异常过滤器和异常处理,需要具体代码示例异常是在程序运行过程中出现的错误或意外情况。在C#中,异常是通过抛出和捕获来处理的。异常处理是保证程序正常运行的关键部分。在C#中,异常过滤器和异常处理是处理异常的两种常见方式。异常过滤器...
    99+
    2023-10-22
    异常处理 异常过滤器 C#语言
  • 如何在Python中处理异常处理的问题
    如何在Python中处理异常处理的问题异常是程序中的错误,当程序出现异常时,可以使用异常处理机制来捕获和处理这些异常,以保证程序的正常运行。Python提供了丰富而强大的异常处理机制,可以通过try-except语句来捕获并处理异常。下面将...
    99+
    2023-10-22
    Python 异常处理
  • Java异常处理如何使用
    这篇文章主要介绍了Java异常处理如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java异常处理如何使用文章都会有所收获,下面我们一起来看看吧。概念异常处理的概念起源于早期的编程语言,如 LISP、PL...
    99+
    2023-07-05
  • 怎么在java中使用finally处理异常
    怎么在java中使用finally处理异常?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发...
    99+
    2023-06-14
  • 如何在Python中进行异常处理
    目录一、抛出异常和自定义异常1、raise语句2、自定义异常类型二、捕捉异常1、捕捉多个异常2、获取异常信息三、finally子句一、抛出异常和自定义异常 Python中使用用异常对...
    99+
    2022-11-13
  • 如何在Python中处理异常情况
    如何在Python中处理异常情况,需要具体代码示例异常处理是编程中非常重要的一部分。当程序执行过程中遇到错误或异常情况时,如果没有相应的处理机制,程序很可能会崩溃或产生不可预测的结果。Python提供了一套强大的异常处理机制,使得我们可以优...
    99+
    2023-10-22
    错误处理 异常处理 异常捕获
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作