处理 T-SQL 中的错误

发布日期:2026-07-10 00:06:04   来源 : 杭州电子商务研究院    浏览量 :5
杭州电子商务研究院 发布日期:2026-07-10 00:06:04  
5

介绍

Transact-SQL 语言具有多种错误处理功能。在本指南中,您将了解 T-SQL 错误处理的基础知识、故意引发错误以及如何在发生错误时发出警报。

在 SQL Server 中,错误可以由发生错误时的 SQL Server 引擎生成,也可以由自定义 T-SQL 代码生成。

错误类型

SQL Server 中的错误有两种类型:系统错误和自定义错误。系统错误可以在 sys.messages 系统视图中查看,由 SQL Server 定义。因此,当发生系统错误时,SQL Server 将记录系统错误,并可能采取措施修复错误。

另一方面,自定义错误是由 T-SQL 自定义代码根据您的代码或业务逻辑生成的。要将自定义错误消息添加到 sys.messages,请使用存储过程 sp_addmessage。

下面是添加自定义错误消息的示例:

      EXEC sp_addmessage 50001, 16, 
N'Unit price needs to be greater than 0'. 
GO
    

在上面的示例中,50001 是消息 ID。此参数可以是 50,001 至 2,147,483,647 之间的整数。

16 是严重性,它是 smallint,范围从 1 到 25。

使用 RAISERROR 引发错误

RAISERROR 允许应用程序生成错误,然后调用进程可以捕获该错误。这使得应用程序中的错误处理更加容易,因为它像任何其他系统错误一样发送。因此,RAISERROR 可用于排除 T-SQL 代码故障、调试和检查变量的值,并根据变量数据返回有意义的错误消息。

下面是在 SQL Server 中使用 RAISERROR 的示例:

      RAISERROR (N'This is message.', -- Message text. 
10, -- Severity, 
1); -- Second argument. 
GO
    

输出结果如下:

这是消息。

使用 THROW 引发错误

THROW 语句是在 T-SQL 代码中引发错误的一种更简单的方法。

下面是在 SQL Server 中如何使用 THROW 的示例:

      THROW 
51000, -- error number
'This is not a valid value for unit price.', -- message
1; --state
GO
    

结果集如下:

      Msg 51000, Level 16, State 1, Line 1 
This is not a valid value for unit price.
    

在上面的例子中,51000 是错误编号。错误编号是一个整数,其值必须介于 50000 和 2147483647 之间。下一个参数是消息,它是一个包含错误描述的字符串。它的格式是 nvarchar(2048),最后是状态,它是一个介于 0 和 255 之间的常数。它显示与消息关联的状态。状态的类型为 tinyint。

理解 @@Error 变量

@@ERROR 是一个系统变量,用于保存发生的最后一个错误的错误号。使用 @@ERROR 的一个缺点是,它保存的值会随着每个附加语句的执行而重置。要获取最后一个错误号,请使用以下查询:

      Select @@ERROR
    

使用 @@Error 的示例

请考虑下面的例子,在选择@@ERROR的值之前引发了自定义错误。

      RAISERROR(N'Message', 16, 1);
IF @@ERROR <> 0
PRINT 'Error=' + CAST(@@ERROR AS VARCHAR(8));
GO
    

输出如下:

      Msg 50000, Level 16, State 1, Line 1
Message
Error=0
    

因此,在使用 @@ERROR 时,建议在错误发生时立即将错误号捕获到变量中,然后继续使用该变量进行处理。以下示例对此进行了说明。

      DECLARE @Value int;
RAISERROR(N'Message', 16, 1);
SET @Value = @@ERROR;
IF @Value <> 0
PRINT 'Error=' + CAST(@Value AS VARCHAR(8));
    

输出如下所示,其中消息的 ID 已成功捕获到变量@Value中。

      Msg 50000, Level 16, State 1, Line 2
Message
Error=50000
    

T-SQL 中的错误处理

T-SQL Try Catch 用于处理 SQL Server 编程中的错误。SQL Server 中的 TRY-CATCH 的工作方式与 Java 和 C# 等流行编程语言中的异常处理类似。例如,当使用 TRY CATCH 编写 T-SQL 代码并且 TRY 块中的代码失败时,执行流将退出 TRY 块并转到 CATCH 块。

下面是 SQL Server 中错误处理的一个示例:

      BEGIN TRY
SELECT 50/0
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_STATE() AS ErrorState
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH
    

如果我们仅执行 50/0,则执行将失败,无法处理错误。在上面的示例中,当发生错误时,流程将移至处理错误的 catch 块。例如,在 catch 块中,我们可以将错误记录在日志表中以跟踪错误。

另外,请注意 ERROR_NUMBER()、ERROR_STATE()、ERROR_LINE() 和 ERROR_MESSAGE() 函数的使用,它们在 catch 块中非常有用。

结论

在本指南中,您学习了 T-SQL 中错误处理的基础知识。如果操作正确,错误处理不仅可以让您更好地了解数据库中的错误,还可以在错误发生时记录错误。

要了解有关 T-SQL 的更多信息,您还可以阅读以下指南:

[T-SQL 简介](/content/ps/en/resources/blog/guides/introduction-tsql-querying.html)

查询编写 SELECT

在 SQL Server 中查询多个表

编写 T-SQL 存储过程

祝您编码愉快!

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据