什么是事务
事务时包含1条或多条语句的逻辑单元。事务中的语句是一个整体,要么一起提交,要么一起撤销。事务在提交前可以回滚,一旦提交就不能撤销修改了,是永久性的修改。
为什么使用事务
可以例举生活中的例子,比如银行转账:A向B转100万。程序的执行顺序:1.A账户减掉100万 2.B账户增加100万。若是都成功执行倒没什么,假设1成功执行,2执行失败,就会出问题。运用事务就不会出现这种问题,因为只要其中有一步操作失败,事务就会回滚,之前的所有操作将会被撤销。
事务的基本控制语句
1.BEGIN TRANSACTION:事务开始
2.COMMIT TRANSACTION:事务提交
3.ROLLBACK TRANSACTION:事务回滚
事务的特性(ACID)
1.ATOMIC(原子性):事务中程序是数据库的逻辑工作单元,对数据的修改要么全执行,要么全不执行。
2.CONSISTENT(一致性):事务执行前后数据一致,事务完成之后数据的修改才可见。
3.ISOLATED(隔离性):并发事务之间不能相互干扰
4.DURABLE(持久性):事务一旦提交就是对数据的永久修改。
下面是一个包含事务的存储过程的例子:

 1 ALTER proc [dbo].[Proc_InsertStudent]2 @stuName nvarchar(50),@stuClassId int,@stuAge int3 as4 begin5 set nocount on  --on表示不返回计数6 set xact_abort on  --当执行事务时,如果出错,会将transcation设置为uncommittable状态7 8 begin try 9 declare @stuCountByName int;
10 select @stuCountByName=count(*) from Students where Name=@stuName;
11
12 if(isnull(@stuName,'')='')
13 begin
14 print('名字不能为空');
15 return;
16 end
17
18 if(@stuCountByName>0)
19 begin
20 print('名字重复');
21 return
22 end
23
24 begin tran  --开启事务
25 insert into Students(Name,ClassId,Age) values(@stuName,@stuClassId,@stuAge)
26 commit tran  --提交事务
27
28 end try
29
30 begin catch
31 if xact_state()=-1
32 rollback tran;  --回滚事务
33 select ERROR_NUMBER() as ErrorNumber;
34 select ERROR_MESSAGE() as ErrorMsg;
35 end catch
36 set xact_abort off;
37 end

其中Students表:
1 CREATE TABLE [dbo].[Students](
2  [ID] [int] IDENTITY(1,1) NOT NULL primary key,
3  [Name] [nvarchar](50) NOT NULL,
4  [ClassId] [int] NOT NULL,
5  [Age] [int] NOT NULL,
6  [CreateTime] [datetime] NOT NULL
7 );

 1 ALTER proc [dbo].[Proc_InsertStudent]2 @stuName nvarchar(50),@stuClassId int,@stuAge int3 as4 begin5 set nocount on  --on表示不返回计数6 set xact_abort on  --当执行事务时,如果出错,会将transcation设置为uncommittable状态7 8 begin try 9 declare @stuCountByName int;
10 select @stuCountByName=count(*) from Students where Name=@stuName;
11
12 if(isnull(@stuName,'')='')
13 begin
14 print('名字不能为空');
15 return;
16 end
17
18 if(@stuCountByName>0)
19 begin
20 print('名字重复');
21 return
22 end
23
24 begin tran  --开启事务
25 insert into Students(Name,ClassId,Age) values(@stuName,@stuClassId,@stuAge)
26 commit tran  --提交事务
27
28 end try
29
30 begin catch
31 if xact_state()=-1
32 rollback tran;  --回滚事务
33 select ERROR_NUMBER() as ErrorNumber;
34 select ERROR_MESSAGE() as ErrorMsg;
35 end catch
36 set xact_abort off;
37 end

转载于:https://www.cnblogs.com/zxtceq/p/5956813.html

sqlserver中创建包含事务的存储过程相关推荐

  1. 没有发布服务器的 rpc 安全信息,或该信息无效,SQLServer之创建分布式事务

    分布式事务创建注意事项 指定一个由 Transact-SQL 分布式事务处理协调器 (MS DTC) 管理的 Microsoft 分布式事务的起点. 执行 BEGIN DISTRIBUTED TRAN ...

  2. SQLServer之创建分布式事务

    分布式事务创建注意事项 指定一个由 Transact-SQL 分布式事务处理协调器 (MS DTC) 管理的 Microsoft 分布式事务的起点. 执行 BEGIN DISTRIBUTED TRAN ...

  3. sqlserver中常用的几个存储过程

    sqlserver中的存储过程,何为存储过程呢? 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要 ...

  4. wpf中内容包含在border中_Excel中创建包含注释的数学公式

    Step1. Alt+F11打开VBE界面,insert-->module,打开自定义公式编辑面板; Step2. 我打算在一堆的数字和运算符中,用[]来标识我的注释内容.利用正则表达式,将[] ...

  5. sqlserver中创建链接服务器图解教程

    1.展开服务器对象-->链接服务器-->右击"新建链接服务器" 注意:必须以数据库管理员身份登录(通常也就是sa帐号)后,才可以创建"链接服务器" ...

  6. java 创建存储过程_如何在pl/sql中创建及调用JAVA存储过程 | 学步园

    1.创建一个java存储过程helloworld create or replace and compile java source named helloworld as public class ...

  7. 在sqlserver中创建表值函数

    1.创建表值函数SplitStr(用逗号分割字符串) ALTER FUNCTION [dbo].[SplitStr] (@RowData nvarchar(4000), @SplitOn nvarch ...

  8. 如何在Sqlserver 中创建非dbo 的表

    首先创建一个用户 test 其次创建一个Schema :abc 例子 CREATE SCHEMA [abc] AUTHORIZATION [test] GO 创建好这个以后你想使用这个架构建表必须先拥 ...

  9. 去掉SqlServer中字段包含的回车、换行、回车换行符

    -- 制表符 CHAR(9) -- 换行符 CHAR(10) -- 回车 CHAR(13) 注意:特殊字符在Sql Server Management Studio查询中显示为空格,但实际不是空格.在 ...

最新文章

  1. opencv_python使用cv2.imread()读取中文路径,cv2.imwrite()把图片写入中文路径。
  2. 一毕业年薪 201 万!目前全球仅四人,华为最高档“天才少年”这样说
  3. 键盘输入_键盘输入技巧
  4. on a null object reference 问题的解决办法
  5. 在java中必须要有main吗_在一个Java应用程序中main方法必须被说明为_____。
  6. autocad.net中ResultBuffer相关的常量值
  7. 计算机科学学院参加些什么比赛,【安全月进行时】计算机科学学院成功举办2019年实验室安全知识竞赛活动...
  8. 某大型银行深化系统之十四:技术架构
  9. linux系统如何启用安全内核,安全 - Linux 内核引导选项简介
  10. caffe-windows画loss与accuracy曲线
  11. Asp.Net中的三种分页方式总结
  12. rtx2060什么水平_《赛博朋克2077》持续火热 什么样的笔记本才能畅玩这款游戏
  13. Java web 项目读取src或者tomcat下class文件夹下的xml文件或者properties文件
  14. 微信.gif表情包保存到本地
  15. CSS-DIV页面布局
  16. 医药行业的销售数据如何分析?
  17. 计算机软件编程英语词汇集锦一
  18. HTML5基础基础练习题
  19. C C++实现网络验证和本地验证
  20. 如何在网易云音乐上正常听周杰伦的歌曲

热门文章

  1. 重磅汇总!2015-2019学硕国家线走势情况!
  2. 超硬核直播课 | 自主旋翼无人机主流算法、视觉SLAM基础
  3. windows下使用word2vec训练维基百科中文语料全攻略!(三
  4. 零基础入门深度学习 | 第一章:感知器
  5. 你知道应聘上一份机器学习的工作需要哪些条件吗?
  6. 将之前写完的猜数字游戏改为通过javabean_42个宝宝益智游戏良心整理!让宝宝快人一步更聪明...
  7. 如何用vbs编写一个游戏_如何编写一个 SkyWalking 插件
  8. 信安教程第二版-第6章认证技术原理与应用
  9. 远程桌面连接服务器,提示身份验证错误,要求的函数不受支持,但又找不到加密Oracle修正
  10. 如何订阅MQTT服务器历史消息,MQTT协议之消息订阅