使用try/catch处理sql server错误的分步指南

Transact-SQL中的TRY/CATCH语句检测并处理数据库应用程序中的错误情况。此语句是SQL Server错误处理的基石,也是开发健壮的数据库应用程序的重要部分。...

Transact-SQL中的TRY/CATCH语句检测并处理数据库应用程序中的错误情况。此语句是SQL Server错误处理的基石,也是开发健壮的数据库应用程序的重要部分。

A toy hazard sign surrounded by other various road warning signs

TRY/CATCH适用于从2008年开始的SQL Server、Azure SQL数据库、Azure SQL数据仓库和并行数据仓库。

介绍try/catch

TRY./CATCH通过指定两条Transact-SQL语句来工作:一条用于“尝试”,另一条用于“捕获”可能出现的任何错误。当SQL Server遇到TRY/CATCH语句时,它会立即执行TRY子句中包含的语句。如果TRY语句成功执行,SQL Server将继续。但是,如果TRY语句生成错误,SQL Server将执行CATCH语句以优雅地处理错误。

基本语法采用以下形式:

BEGIN TRY{ sql_statement | statement block }END TRYBEGIN CATCH[ { sql_statement | statement_block } ]END CATCH[ ; ]

以身作则

考虑一个人力资源数据库,该数据库包含一个名为“雇员”的表,该表包含关于公司中每个员工的信息。该表使用整数员工ID号作为主键。

您可以尝试使用以下语句将新员工插入数据库:

INSERT INTO employees(id, first_name, last_name, extension)VALUES(12497, 'Mike', 'Chapple', 4201)

在正常情况下,此语句将向Employees表中添加一行。但是,如果数据库中已存在ID为12497的员工,则插入该行将违反主键约束并导致以下错误:

Msg 2627, Level 14, State 1, Line 1Violation of PRIMARY KEY constraint 'PK_employee_id'. Cannot insert duplicate key in object 'dbo.employees'.The statement has been terminated. Msg 2627, Level 14, State 1, Line 1Violation of PRIMARY KEY constraint 'PK_employee_id'. Cannot insert duplicate key in object 'dbo.employees'.The statement has been terminated.

另一种方法是将语句包装在TRY…CATCH语句中,如下所示:

BEGIN TRYINSERT INTO employees( id, first_name, last_name, extension)VALUES(12497, 'Mike', 'Chapple', 4201)END TRYBEGIN CATCHPRINT 'ERROR: ' + ERROR_MESSAGE( );EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'An error occurred creating a new employee record.',@subject = 'Employee Database Error' ;END CATCH

在本例中,发生的任何错误都会报告给执行命令的用户和[email protected]电子邮件地址。向用户显示的错误为:

BEGIN TRYINSERT INTO employees( id, first_name, last_name, extension)VALUES(12497, 'Mike', 'Chapple', 4201)END TRYBEGIN CATCHPRINT 'ERROR: ' + ERROR_MESSAGE( );EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'An error occurred creating a new employee record.',@subject = 'Employee Database Error' ;END CATCH

应用程序正常执行,允许程序员处理错误。使用TRY/CATCH语句是主动检测和处理SQL Server数据库应用程序中发生的错误的一种优雅方式。

学习更多

要了解有关结构化查询语言的更多信息,请查看我们的文章《SQL基础知识》。

  • 发表于 2021-09-08 06:49
  • 阅读 ( 268 )
  • 分类:数学

你可能感兴趣的文章

选中的(checked)和java中的未检查异常(unchecked exception in java)的区别

...处理,程序的正确流将终止,并且不会生成类文件。可以使用try,catch块来处理错误。 图01:检查的异常处理 根据上述内容,FileReader从文件中读取数据。text1.txt文件在指定位置不存在。可以给出异常的代码放在try块中。要打印...

  • 发布于 2020-10-19 08:38
  • 阅读 ( 275 )

java异常:您处理的对吗?

...方更好地处理而不是在遇到异常情况的地方处理时,可以使用它。考虑以下示例: ...

  • 发布于 2021-03-13 09:11
  • 阅读 ( 255 )

如何正确处理java异常

...在本文中,您将了解什么是异常,它们为什么重要,如何使用它们,以及要避免的常见错误。大多数现代语言都有某种类型的异常处理,因此如果您从Java开始,您可以随身携带这些技巧中的大部分。 ...

  • 发布于 2021-03-14 17:31
  • 阅读 ( 236 )

使sql server数据库维护简单的批处理脚本

...高数据库的性能和可靠性。我们之前已经向您展示了如何使用简单的命令行脚本备份SQL Server数据库,因此我们将以同样的方式提供一个脚本,它将允许您轻松地执行常见的维护任务。 压缩/收缩数据库[/Compact] 有几个因素会影响S...

  • 发布于 2021-04-13 07:02
  • 阅读 ( 181 )

如何将sql数据库备份到网络共享

...): 将变量设置为本地SQL备份目录。创建MyDB的SQL备份(使用Windows身份验证)到本地SQL备份目录。将本地备份文件复制到网络共享。删除本地备份文件。 同样,这是首选方法,因为它是现成的,而且备份失败的可能性很小,因...

  • 发布于 2021-04-13 10:39
  • 阅读 ( 204 )

使用sql server management studio还原sql数据库备份

我们之前介绍过使用命令行进行简单的SQL数据库还原,该命令行非常适合还原在同一个SQL Server安装上创建的备份文件,但是,如果您要还原在不同安装上创建的备份,或者只是喜欢点击式界面,使用SQLServerManagementStudio(或速成...

  • 发布于 2021-04-13 11:29
  • 阅读 ( 170 )

铸造(cast)和转换(convert)的区别

...。例如,需要将数据从datetime转换为varchar类型的用户可以使用convert和Cast函数。 虽然这两种功能在用户的转换需求中都被证明是有效的,但是用户需要知道哪些功能在特定的设置中表现最好。请记住,Convert是特定于SQL server的,...

  • 发布于 2021-06-23 23:54
  • 阅读 ( 209 )

ms sql服务器(ms sql server)和神谕(oracle)的区别

...们大多数人都依赖互联网。这反过来又消除了旧日账本的使用,并导致了数据库的使用。渐渐地,我们开始使用关系数据库(RDB)来协同工作,使用更多的数据,而不必为不同的目的重新安排数据。为了处理RDB,数据库专家为这...

  • 发布于 2021-06-24 23:32
  • 阅读 ( 218 )

默认实例(default instance)和sql server中的命名实例(named instance in sql server)的区别

...许用户创建数据库并在数据库的表中排列数据。用户可以使用结构化查询语言来操作数据。SQL实例是sqlserver.exe可执行文件的副本。它是SQL server的安装。SQL server实例有两种类型:默认实例和命名实例。安装SQL server时,会出现“...

  • 发布于 2021-07-01 06:34
  • 阅读 ( 522 )

错误(error)和c中的异常#(exception in c#)的区别

...语言中,错误和异常有着明显的区别,尽管人们经常交替使用这两个术语。错误是由于缺少所需的系统资源而发生的情况。异常是由于程序中的问题而出现的情况。总的来说,错误是不可恢复的,而异常是可恢复的。 覆盖的关...

  • 发布于 2021-07-01 09:26
  • 阅读 ( 245 )
wsy2001114
wsy2001114

0 篇文章

相关推荐