创建事务的储存过程
创建事务的储存过程也就是一种小小的封装,把创建的事务封装到这个储存过程当中,方便调用。创建事务详见SQL 事务机制-transaction
数据库基础表TCount表
设置功能:
创建事务储存过程:aa借款100元的账户情况统计
1.判断事务是否存在用 if Exists()--drop
if exists(select * from sysobjects where name='USP_BorrowAndRepay') drop proc USP_BorrowAndRepay go2.创建事务储存过程
create proc USP_BorrowAndRepay @Borrow money, @Name nvarchar(20) as begin set nocount on;--*阻止在结果中返回可显示受Transact-SQL语句影响的行数的消息。 begin transaction; begin try update TCount set Money = Money+@Borrow where Name=@Name; update TCount set Borrow = Borrow+@Borrow where Name=@Name; update TCount set Total = Total-@Borrow+Repay where Name=@Name; commit transaction; end try begin catch rollback transaction; print ('发生异常,事务进行回滚'); end catch end go注:
- set nocount on; 表示设置不显示受影响行数。
- begin try ...end try ;begin catch ...end catch 异常测试,异常捕捉。
- begin transaction ..commit transaction.. rollback transaction...end transaction 事务开始标志--提交事务--事务回滚(撤销)--事务结束标志。
3.声明并初始化变量,调用事务储存过程
declare @Name nvarchar(20) set @Name = 'aa' select * from TCount where Name = @Name---未调用之前结果 exec dbo.USP_BorrowAndRepay 100,@Name select * from TCount where Name = @Name--调用事务储存过程之后结果结果:
创建通配符的储存过程
通配符一般用在模糊查询当中,通过运用通配符来查找一类数据。
常见的通配符有: %、_ 、 [charlist]、[^charlist]等,常与like等关键字搭配使用。
SQL 通配符 、分页 功能的学习
数据库基础表TCourse
设置功能:
1.查询带课程名中间带有“设”和职位级别中中间带有“教”字段的信息 :%设%;%教%
2.查询所有的课程名和职位的信息
1.判断事务是否存在用 if Exists()--drop
use TestSchool if (exists (select * from sysobjects where name = 'USP_SelectTCourseInfo')) drop proc USP_SelectTCourseInfo go2.创建储存过程
create proc USP_SelectTCourseInfo( @Course varchar(20), @Ranks varchar(20) ) as select * from TCourse where Course like @Course and Ranks like @Ranks; go3.调用带通配符参数的储存过程
--执行存储过程USP_SelectTCourseInfo exec USP_SelectTCourseInfo @Course='%设%',@Ranks='%教%'; exec USP_SelectTCourseInfo @Course='%',@Ranks='%_%'; exec USP_SelectTCourseInfo @Course='%械%',@Ranks='%_%'; go结果:
不缓存<重编译>储存过程
两种实现强制重编译的方式:
- 基于with recompile 的储存过程级别重编译
- 基于option [recompile] 的语句级重编译
注:忽略重建索引,更新统计信息等导致重编译情况。
两者的区别之处:
- 一个是储存过程级别重编译,一个是语句级重编译
- 从编译生成的储存计划来看,两种方式的内在机制差异较大。
查看当前缓存的执行计划
select * from sys.[syscacheobjects]什么是编译?
分析储存过程和创建执行计划的过程称为编译。
编译的过程包括分析和创建两个步骤
分析:
执行储存过程成功通过解析阶段,将会进行分析步骤。分析是优化查询的重要依据。类似分门别类,建索引。主要分析包括以下四点:
- 表中的数据量。
- 表的索引的存在及特征,以及数据在索引列中的分布。
- where 子句条件所使用的比较运算符和比较值。
- 是否存在联接以及 union、froup by 和 order by 关键字。
创建执行计划
分析过后,创建执行计划置于内存<缓存池>中。通过调用内存中的执行计划来实现快速的调用。其中单次调用成为调用执行计划,多次调用成为重用执行计划。
什么是重编译?
重编译是指每次使用调用存储过程或其他过程时,都进行重新编译重新生成执行计划并调用,不管内存中是否有存储好的执行计划。重编译的目的是保证实时返回的结果是正确的。
注:
编译和重编译,都是要消耗资源的。
重用执行计划:
- 判断储存过程
- 创建储存过程
- 调用储存过程
结果:
耗费时间为:0.086秒
2.重编译,重新创建执行计划。
- 判断储存过程是否存在
- 创建储存过程
- 调用储存过
耗时:0.096秒
注:我们一般采用重用执行计划来进行SQL优化查询,提高性能。但是现在,由于数据的复杂性越来越大,我们经常采用重用执行计划和重编译相结合的方法进行优化查询 。
1.《sql语句如何添加事务,回滚事务sql语句!》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《sql语句如何添加事务,回滚事务sql语句!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3222070.html