在公司项目中看到有这样使用事务的:

-- 开启事务
BEGIN TRAN
INSERT TABLE1(ID) VALUES (1)
INSERT TABLE2(ID) VALUES (2)
UPDATE TABLE3 SET ID=3
IF @@ERROR > 0
BEGIN
ROLLBACK TRAN
RETURN 1003
END
COMMIT TRAN

乍一看没啥问题,仔细思考就能发现有很大的问题。

@@ERROR:并不是错误的计数器,而是没执行一条SQL语句就会产生一个新的@@ERROR。

那有人就会觉得那只有一条增删改的时候就可以这么用。

是可以,但是还是要谨慎。下面也是在公司项目中看到的错误例子:

-- 开启事务
BEGIN TRAN
INSERT TABLE1(ID) VALUES (1)
SET @New_ID = SCOPE_IDENTITY()
IF @@ERROR > 0
BEGIN
ROLLBACK TRAN
RETURN 1003
END
COMMIT TRAN

所以这种写法有很大的问题,这种问题就导致数据错乱。

正确使用事务:

BEGIN TRY                -- 这里没有Try也是可以的
SET XACT_ABORT ON; -- 执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚
BEGIN TRAN
  INSERT INTO TABLE1 SELECT 1
  INSERT INTO TABLE2 SELECT 2
  UPDATE TABLE3 Set ID = 3
COMMIT TRANEND TRY
BEGIN CATCH
RAISERROR ('修改异常!',16,1) --抛出异常
END CATCH

SQL Server @@ERROR的小误区大Bug的更多相关文章

  1. MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems

          早晨宁波那边的IT人员打电话告知数据库无法访问了.其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情 ...

  2. [小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)

    [小细节,大BUG] 6.问题描述:当从Plist文件加载数据,放入到tableView中展示时,有时有数据,有时又没有数据.这是为什么呢?相信很多大牛都想到了:我们一般将加载的数据,转换成模型,放入 ...

  3. Invalid object name ‘sys.configurations’. (Microsoft SQL Server, Error: 208)

    http://blogs.msdn.com/b/ramaprasanna/archive/2009/09/16/invalid-object-name-sys-configurations-micro ...

  4. SQL Server error

    原因:文件没有权限 出错: TITLE: Microsoft SQL Server Management Studio------------------------------ Attach dat ...

  5. [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)

    The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsof ...

  6. safari 与 chrome 的小区别大BUG

    safari 与 chrome 的小区别大BUG 时间:2016-11-01 17:33:19 作者:zhongxia 原文地址:https://github.com/zhongxia245/blog ...

  7. SQL Server在本地计算机上用SSMS(SQL Server Management Studio)登录不上,错误消息:(Microsoft SQL Server, Error: 18456)

    今天遇到了一个奇怪的问题,公司目前在SQL Server上都采用AD域账号登录,由于账号人数众多,所以我们建立了一个AD Group(域组),将大家的AD账号加入了这个AD Group,然后我们将这个 ...

  8. SQL Server内存理解的误区

    SQL Server内存理解 内存的读写速度要远远大于磁盘,对于数据库而言,会充分利用内存的这种优势,将数据尽可能多地从磁盘缓存到内存中,从而使数据库可以直接从内存中读写数据,减少对机械磁盘的IO请求 ...

  9. SQL server Error Number

    描述 HY000 所有绑定列都是只读的. 必须是可升级的列,以使用 SQLSetPos 或 SQLBulkOperations 更改或插入行. HY000 已检测到一个旧 netlib (%s).请删 ...

随机推荐

  1. jQueryh插件imgareaselect

    1.插件介绍 imgareaselect 是一个 允许用户使用简单.直观的点击.拖动界面图像选择矩形区域的jQuery插件.该插件可用于 web 应用程序中轻松实现图像裁剪功能,以及其他功能,如照片标 ...

  2. (转)解决 TortoiseGit 诡异的 Bad file number 问题

    此问题,请不要使用 rebase, 下载最新的 TortoiseGit 即可: TortoiseGit-2.3中文版与Git安装包_手册: http://download.csdn.net/detai ...

  3. Mysql加锁过程详解(3)-关于mysql 幻读理解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  4. QApplication:No such file or directory 错误解决

    首先打开 Makefile 文件,查看其中 INCPATH 变量的值是否包含程序中所涉及到的头文件路径. MAKEFILE = Makefile ####### Compiler, tools and ...

  5. WebBrowser引用IE版本问题,更改使用高版本IE

    做了一个Winform的项目.项目里使用了WebBrowser控件.以前一直都以为WebBrowser是直接调用的系统自带的IE,IE是呈现出什么样的页面WebBrowser就呈现出什么样的页面.其实 ...

  6. Ubuntu 18.1远程登录服务器--ssh的安装

    默认的Ubuntu 18.1桌面版没有安装ssh远程登录服务: 打开"终端窗口",输入"sudo apt-get update"-->回车-->&q ...

  7. C# Json反序列化

    Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自行在nuget中导入 Jso ...

  8. 修改CentOS服务器时间为北京时间

    购买了VPS,CentOS系统,发现服务器时间与北京时间往往不一致,存在时差. [clive@server workspace]$ date 2018年 05月 30日 星期三 02:02:47 UT ...

  9. 大数据Spark与Storm技术选型

    先做一个对比:   对比点 Storm Spark Streaming 实时计算模型 纯实时,来一条数据,处理一条数据 准实时,对一个时间段内的数据收集起来,作为一个RDD,再处理 实时计算延迟度 毫 ...

  10. canvas-8searchLight4.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...