SQL SERVER 错误捕捉与事务
在SQL server (MSSQL)写代码中,不管是一段SQL代码,还是存储过程等,有的时候总会遇见程序报错,导致系统崩溃,
与C#同理,SQL SERVER 也提供了回滚与错误捕捉,事务比较复杂,有时间在以后的文章中与大家分享。
任何程序都可能出现错误,在SQL Server中执行Transact-SQL也不例外。如果在Transact-SQL中发生了错误,
一般有两种捕捉错误的方法,一种是在客户端代码(如 c#、delphi等)中使用类似try...catch的语句进行捕捉;
另外一种就是在Transact-SQL中利用Transact-SQL本身提供的错误捕捉机制进行捕捉。
本文就Transact-SQL语句的执行而产生的错误,给大家简单介绍。
不带事务,简单捕捉:

DECLARE @A TABLE
(ID INT) BEGIN TRY INSERT INTO @A SELECT 1
INSERT INTO @A SELECT 'ceshi' END TRY BEGIN CATCH PRINT 'Error Number :'+CAST(ERROR_NUMBER() AS VARCHAR(10))
PRINT 'Error Message :'+ERROR_MESSAGE()
PRINT 'Error Severity :'+CAST(ERROR_SEVERITY() AS VARCHAR(10))
PRINT 'Error State :'+CAST(ERROR_STATE() AS VARCHAR(10))
PRINT 'Error Line :'+CAST(ERROR_LINE() AS VARCHAR(10))
PRINT 'Error Proc :'+COALESCE(ERROR_PROCEDURE(),'not within proc') END CATCH
BEGIN TRY END TRY 关键字是错误捕捉的关键字,表示开始监测程序执行情况,中间放你的代码
BEGIN CATCH END CATCH 中间可以捕捉程序运行发生的异常,但是注意,并不是所有错误都可以捕捉,当然,
可以配置进SQL SERVER 数据库。
BEGIN CATCH END CATCH之间可以很多事,比如写入操作日志,或者进行其他操作,此方法不会回滚你所执行的代码,需要手动修改
带事务的,简单捕捉:

IF (OBJECT_ID('A','U') IS NOT NULL)
DROP TABLE A
CREATE TABLE A(ID INT)
BEGIN TRAN
BEGIN TRY
INSERT INTO A SELECT 1
INSERT INTO A SELECT 'ceshi'
COMMIT TRAN --提交事务
END TRY
BEGIN CATCH
ROLLBACK TRAN--回滚事务
PRINT 'Error Number :'+CAST(ERROR_NUMBER() AS VARCHAR(10))
PRINT 'Error Message :'+ERROR_MESSAGE()
PRINT 'Error Severity :'+CAST(ERROR_SEVERITY() AS VARCHAR(10))
PRINT 'Error State :'+CAST(ERROR_STATE() AS VARCHAR(10))
PRINT 'Error Line :'+CAST(ERROR_LINE() AS VARCHAR(10))
PRINT 'Error Proc :'+COALESCE(ERROR_PROCEDURE(),'not within proc')
END CATCH
如果执行上面的代码,将会输出以下内容:

把 SELECT * FROM A 加上,会看见A表中并未出现插入的数据

SQL SERVER 消息库

今天的分享到此结束,有需要的可以关注留言讨论
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享SQL SERVER 相关知识
SQL SERVER 错误捕捉与事务的更多相关文章
- SQL Server:错误处理及事务控制
目录: 解读错误信息 RAISERROR THROW 实例 使用 @@ERROR 使用 XACT_ABORT 使用TRY/CATCH 现实中的事务语句 删除 更新 银行取钱 解读错误信息 Msg 54 ...
- SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...
- SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...
- SQL Server【提高】事务
事务 事务是作为单个逻辑单元执行的一系列操作,它是一个不可分割的工作逻辑单元.它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 特性 原子性Atomicity 事务是一个完整的操作, ...
- SQL Server 错误日志过滤(ERRORLOG)
一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...
- [AlwaysOn Availability Groups]SQL Server错误日志(AG)
SQL Server错误日志(AG) SQL Server错误日志会记录影响AG的时间,比如: 1.和Windows故障转移集群交互 2.可用副本的状态 3.可用数据的状态 4.AG endpoint ...
- SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- SQL Server 错误日志收缩(ERRORLOG)
一.基础知识 默认情况下,错误日志位于 : C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG 和ERRORLOG.n 文 ...
- SQL Server 2014新特性——事务持久性控制
控制事务持久性 SQL Server 2014之后事务分为2种:完全持久, 默认或延迟的持久. 完全持久,当事务被提交之后,会把事务日志写入到磁盘,完成后返回给客户端. 延迟持久,事务提交是异步的,在 ...
- 已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
操作SQLServer数据库时.遇到这种问题:已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222) 经过查找材料了解为资源抢占,照成死锁,杀死进程就OK了.详细操作 ...
随机推荐
- [ORACLE]Oracle客户端SQLPlus安装与运用
简述 sqlplus :oracle公司提供用户操作oracle数据库的工具. sqlplus是oracle原始数据操作的客户端,这种命令行的格式有着强大的逻辑性,如果经常使用会对数据库的理解加深很多 ...
- windows 10 家庭版安装Docker和portainer汉化版
目录 前景提要 存在问题 一.Docker的windows版本安装 1.官网下载: https://www.docker.com/(没有本文问题的直接下载就好.) 2.本文是找到其他版本的Docker ...
- lnmp中遇到open_basedir配置无效问题
在使用LNMP包安装PHP时,发现直接修改php.ini的配置是无法生效的,其原因竟然是因为nginx的配置文件,覆盖了php.ini的配置. ----------------------– LN ...
- JUC(六)堵塞队列与线程池
堵塞队列 简介 def:在多线程中实现高效.安全的数据传输,主要是通过一个共享的队列,使得数据能够从一端输入,从另一端输出 当队列是空的,取数据的线程就会被堵塞,直到其他线程往空的队列中添加数据 当队 ...
- 【Vue2.x源码系列06】计算属性computed原理
上一章 Vue2异步更新和nextTick原理,我们介绍了 JavaScript 执行机制是什么?nextTick源码是如何实现的?以及Vue是如何异步更新渲染的? 本章目标 计算属性是如何实现的? ...
- [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- Python-tomorrow应用于UI自动化的简单使用
一.简介 tomorrow属于第三方的一个模块,使用threads方法作为装饰器去修饰一个普通的函数,使其可以达到并发效果.使用起来非常简单. 二.安装 pip install tomorrow 使用 ...
- Centos7.x 安装jenkins
一.安装 前提:需查看是否安装了JDK 1.第一种方法 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat ...
- 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器
作者:京东物流 覃玉杰 1. 简介 Graceful Response是一个Spring Boot体系下的优雅响应处理器,提供一站式统一返回值封装.异常处理.异常错误码等功能. 使用Graceful ...
- ersync 实时同步
ersync 实时同步 目录 ersync 实时同步 实时同步概述 结合sersync+rsync实时同步实战 环境准备 部署sersync(客户端) 实时同步概述 什么是实时同步 实时同步是一种只要 ...