SQL中的存储过程和事务

存储过程

存储过程:针对比较复杂的t_sql逻辑模块,进行封装,代码可以重用
存储过程:预编译
优点:
1、可以代码重用、便于维护
2、执行速度快
3、减低网络流量
4、安全性高(定义好的存储过程可以设置访问权限)
缺点:
不便于移植


存储过程分类:
1、系统存储过程(maseter 数据库中):系统提供的存储过程,在所有的数据库中无需用户再次定义都可以直接使用(调用)
调用存储过程语法格式:
exec 存储过程名称

2、自定义存储过程
1、无参存储过程
2、有参存储过程:
1)输入参数
2)输出参数 :必须使用output关键字
3)默认值:带默认值的存储过程,调用的时候可以给参数赋值,也可以不赋值,不传参的时候使用的是默认值,传参的时候使用的传递来的数据

创建存储过程语法格式:
create proc|procedure 存储过程名称
[参数列表]
as
sql语句

[参数列表]格式:@参数名 参数类型  (@name vachar(10) / @age int)

调用存储过程语法格式:
exec 存储过程名称

 

事务

事务:可以控制一个完整逻辑代码模块中的命令同时成功或同时失败
事务特性:
1、原子性:逻辑功能不可分割
2、隔离性:多个事务之间不冲突
3、一致性:要么全成功,要么全失败
4、持久性:事务处理完的功能数据永久保留


begin tran|transaction 事务名称        --开始事务
commit tran|transaction          --提交事务(逻辑功能模块全部成功)
rollback tran|transaction          --回滚事务(撤销所有操作)

--三毛给小毛转账1000元
--开始事务
begin tran tran_bank
--定义变量用来存储错误编号
declare @tran_error int
set @tran_error=0 --给变量赋初始值
update BANK set currentMoney=currentMoney-1000 where CustomerName='三毛'
--三毛减钱是否有异常
set @tran_error=@tran_error+@@error
update BANK set currentMoney=currentMoney+1000 where CustomerName='小毛'
--小毛加钱是否有异常
set @tran_error=@tran_error+@@error
if @tran_error>0
--有异常,回滚
begin
rollback tran --撤销所有操作
print '交易失败!'
end
else
--提交事务
begin
commit tran --提交所有操作
print '交易成功!'
end
go

 

create proc del_class @id int
as
begin tran
declare @error int = 0
delete from StuInfo where cid = @id
set @error += @@error
delete from ClassInfo where id = @id
set @error += @@error

if @error<>0
rollback
else
commit
go

exec del_class 1000

 

上一篇:基于PostGIS的高级应用(5)-- Polygon Spliting


下一篇:Revit二次开发:API调用RevitUI界面的命令/ribbon按钮(含自己开发的功能按钮)