Transact-SQL 代码中的错误可使用 TRY…CATCH 构造处理,此功能类似于C#语言的异常处理功能。TRY…CATCH 构造包括两部分:一个 TRY 块和一个 CATCH 块
1.TRY...CATCH 块不处理导致数据库引擎关闭连接的严重性为 20 或更高的错误。但是,只要连接不关闭,TRY...CATCH 就会处理严重性为 20 或更高的错误。
2.严重性为 10 或更低的错误被视为警告或信息性消息,TRY...CATCH 块不处理此类错误。

1--ids 主键 2createtable test1( ids intnotnull,
3constraint pk_test1 primarykey(ids)
4)
5go
6select*from test1
7begin try
89BEGINTRAN10insertinto test1 (ids)
11select11213insertinto test1 (ids)
14select21516insertinto test1 (ids)
17select1--违反了主键约束 1819COMMITTRAN20PRINT'Transaction committed'
21end try
22begin catch
23ROLLBACK24PRINT'Transaction rolled back'2526SELECT27 ERROR_NUMBER() AS ErrorNumber,
28 ERROR_SEVERITY() AS ErrorSeverity,
29 ERROR_STATE() AS ErrorState,
30 ERROR_PROCEDURE() AS ErrorProcedure,
31 ERROR_LINE() AS ErrorLine,
32 ERROR_MESSAGE() AS ErrorMessage;
33end catch
34
35select*from test1
36

TRY...CATCH 使用下列错误函数来捕获错误信息:
ERROR_NUMBER() 返回错误号。
ERROR_MESSAGE() 返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名或时间)提供的值。
ERROR_SEVERITY() 返回错误严重性。
ERROR_STATE() 返回错误状态号。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。

1BEGIN TRY
2SELECT1/0;
3END TRY
4BEGIN CATCH
5SELECT6 ERROR_NUMBER() AS ErrorNumber,
7 ERROR_SEVERITY() AS ErrorSeverity,
8 ERROR_STATE() AS ErrorState,
9 ERROR_PROCEDURE() AS ErrorProcedure,
10 ERROR_LINE() AS ErrorLine,
11 ERROR_MESSAGE() AS ErrorMessage;
12END CATCH;
13

对于与TRY...CATCH 构造在同一执行级别发生的错误,TRY...CATCH 将不处理以下两类错误:
1.编译错误,例如阻止批处理执行的语法错误。
2.语句级重新编译过程中出现的错误,例如由于名称解析延迟而造成在编译后出现对象名解析错误。

1--由SELECT 语句生成的对象名解析错误是不被TRY…CATCH 构造捕捉 2BEGIN TRY
3-- Table does not exist 4SELECT*FROM Table1;
5END TRY
6BEGIN CATCH
7SELECT8 ERROR_NUMBER() AS ErrorNumber,
9 ERROR_SEVERITY() AS ErrorSeverity,
10 ERROR_STATE() AS ErrorState,
11 ERROR_PROCEDURE() AS ErrorProcedure,
12 ERROR_LINE() AS ErrorLine,
13 ERROR_MESSAGE() AS ErrorMessage;
14END CATCH
15
如果某个错误在 TRY 块内的编写或语句级别重新编写过程中并在较低的执行级别(例如,执行 sp_executesql 或用户定义存储过程时)发生,则该错误会在低于 TRY…CATCH 构造的级别上发生,并由相关联的 CATCH 块处理。 

sql server try...catch使用相关推荐

  1. sql server 2005中新增加的try catch学习

    sql server 2005中新增加的try catch,可以很容易捕捉异常了,今天大概学习看了下,归纳下要点如下 需要什么来搜一搜吧so.bitsCN.com 基本用法BEGIN TRY { sq ...

  2. SQL SERVER 里的 try catch

    sql server 2005中新增加的try catch,可以很容易捕捉异常了 基本用法: begin try      {  sql_statement |  statement_block  } ...

  3. SQL Server 数据库备份

    SQL Server 数据库备份 原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html 备份数据库是指对数据库或事务日志进行复制 ...

  4. sql server 2008学习10 存储过程

    输入输出参数: 给存储过程传参数,叫做输入参数,用户告诉存储过程需要 利用这个参数干些什么. 输出参数: 从存储过程得到那些数据. 创建一个可选参数的存储过程: create proc pa1 @na ...

  5. sql server面试题

    本面试题由2344095 (有心人)整理, 由ashzs((可以包含中文字符)) 解答,感谢二位! 1.磁盘柜上有14块73G的磁盘, 数据库为200G 大小包括日志文件,如何设置磁盘(要说明这14磁 ...

  6. 将Excel文件数据库导入SQL Server

    将Excel文件数据库导入SQL Server的三种方案//方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server openFileDialog = n ...

  7. powershell连接数据库_PowerShell 连接SQL Server 数据库

    PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整理的一小段脚本,后来没有用上,先记录在这里: 建立数据库连接 查询返回一个DataTatble对象 执 ...

  8. MS sql server和mysql中update多条数据的例子

    1. MS sql server中使用动态的表名:declare @tableName nvarchar(160) set @tableName = 't_stat_all' declare @sql ...

  9. 如何通过代码连接SQL Server数据库

    我们曾经为南方电网做过几个有关架空线路的科技项目,要趁着假期有整段的空闲时间,把这些代码整理一下,放入团队刚刚重构的代码库中. 由于这些项目使用的数据库为 SQL Server,所以在整理代码之前需要 ...

最新文章

  1. android 开启一个定时线程_ANDROID开发中定时器的3种方法
  2. mysql double 20_MySQL教程20-小数类型
  3. js数据结构和算法(8)-图
  4. 【C++深度剖析教程38】类模板深度剖析
  5. 想进美团不知道选哪个技术岗位?这里有一份通关秘籍!
  6. Laravel 学习路线【4】控制器
  7. django自定义模板标签,通过键获取字典的值,屏蔽姓名等隐蔽信息并调用展示到页面上
  8. linux上jar包的运行
  9. DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN
  10. 这枚纸币为什么这么贵?
  11. 6大黑科技app合集,绝对让你大开眼界
  12. csdn专用必杀技----谷歌浏览器插件
  13. 刚刚!2022年ABC中国大学排行榜发布
  14. gitbub.com设置协作者提交代码步骤
  15. kubernetes Downward API
  16. Android 六大布局
  17. win10开机内存占用过高
  18. 电脑录音软件哪个比较专业
  19. matlab仿真igbt,逆变器用IGBT吸收电路的Matlab仿真研究
  20. 计算机组成原理组间串行进位,计算机组成原理第二章课件.ppt

热门文章

  1. QT的QMessageAuthenticationCode类的使用
  2. 经典C语言程序100例之十六
  3. c++内存,堆和栈的区别
  4. C语言与C++的区别,从7个角度来区分C语言与C++
  5. java集群解析文件_干货:一文详解Redis集群原理核心内容
  6. python3.6 mysql 教程_Python3.6与MySQL建立连接
  7. 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
  8. kerberos安装配置、配置kerberos server、client、日常操作与常见问题、卸载kerberos、hive整合kerberos
  9. 06_pandas入门教程,引包,使用DataFrame和Series做一些事情
  10. Docker容器间通讯,直接路由方式实现网络通讯