在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 错误捕捉与事务的更多相关文章

  1. SQL Server:错误处理及事务控制

    目录: 解读错误信息 RAISERROR THROW 实例 使用 @@ERROR 使用 XACT_ABORT 使用TRY/CATCH 现实中的事务语句 删除 更新 银行取钱 解读错误信息 Msg 54 ...

  2. SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

    在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...

  3. SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过

    存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...

  4. SQL Server【提高】事务

    事务 事务是作为单个逻辑单元执行的一系列操作,它是一个不可分割的工作逻辑单元.它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 特性 原子性Atomicity 事务是一个完整的操作, ...

  5. SQL Server 错误日志过滤(ERRORLOG)

    一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...

  6. [AlwaysOn Availability Groups]SQL Server错误日志(AG)

    SQL Server错误日志(AG) SQL Server错误日志会记录影响AG的时间,比如: 1.和Windows故障转移集群交互 2.可用副本的状态 3.可用数据的状态 4.AG endpoint ...

  7. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  8. SQL Server 错误日志收缩(ERRORLOG)

    一.基础知识 默认情况下,错误日志位于 : C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG 和ERRORLOG.n 文 ...

  9. SQL Server 2014新特性——事务持久性控制

    控制事务持久性 SQL Server 2014之后事务分为2种:完全持久, 默认或延迟的持久. 完全持久,当事务被提交之后,会把事务日志写入到磁盘,完成后返回给客户端. 延迟持久,事务提交是异步的,在 ...

  10. 已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

    操作SQLServer数据库时.遇到这种问题:已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222) 经过查找材料了解为资源抢占,照成死锁,杀死进程就OK了.详细操作 ...

随机推荐

  1. pysimplegui之调试输出(easy_print = Print = eprint)

    "Easy" API 系列中的另一个调用是EasyPrint. 与其他常用的 PySimpleGUI 调用一样,同一个调用还有其他名称.您可以使用Print或eprint除了Eas ...

  2. python实现关闭usb功能

    禁用usb和启用usb 一禁用usb自动加载功能 公司内部有时候需要禁用usb接口的文件拷贝,但是打印机,扫描枪等待其他设备的使用,我们应该怎么做呢,很简单,可以通过修改BIOS,注册表和第三方软件实 ...

  3. 无法加载 DLL“xxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

    有一台服务器在执行接口的时候遇到了这样一个问题: 其他服务器上都没有这个问题,IIS部署好的项目目录的bin文件夹下是有这个dll的,但却提示无法加载,在网上找了好多帖子,终于发现了问题. 首先用De ...

  4. 通过 iframe 调用 天气预报&jsonp

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Kubernetes入门实践(YAML)

    YAML是Kubernetes的标准工作语言 YAML介绍 Kubernetes使用了YAML语言一个非常关键的特性,叫作"声明式",对应的有另外一个词: "命令式&qu ...

  6. 密码学与网安——intro

    Terminology primitive: 原语 (一种不可分割的最基础操作,跟具体的视角和情形有关) 两个时间节点 1949年(1945年):Shannon 提出完全安全性,开始现代密码学 197 ...

  7. 快速上手Linux核心命令(七):Linux系统信息相关命令

    目录 前言 uname 显示系统信息 hostname 显示或设置系统主机名 du 统计磁盘空间使用情况 echo 显示一行文本 watch 监视命令执行情况 stat whereis 显示命令及其相 ...

  8. 使用Jmeter进行CPU、内存等监控

    一.需要的准备 1.jp@gc - PerfMon Metrics Collector插件(安装方法就不过多介绍啦!) 2.ServerAgent服务器(下载:https://github.com/u ...

  9. php获取未解码之前的原始接口请求参数

    前言 目前的几个项目,业务方基本都使用POST方式请求接口,我们本机磁盘会保留一份请求的原始参数用于请求分析和问题排查使用,一般有问题,也会基于seqid(请求唯一id)捞到日志,copy参数模拟请求 ...

  10. 2020-11-22:mysql中,什么是filesort?

    福哥答案2020-11-22:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/412)如果mysql在排序的时候没有使用到索引那么就会输出 using ...