存储过程创建及其优缺点

  • 格式:pdf
  • 大小:96.21 KB
  • 文档页数:2

存储过程创建及其优缺点

⾸先介绍⼀下概念,存储过程(Stored Procedure)是⼀组为了完成特定功能的SQL语句集,是利⽤SQL Server所提供的Transact-SQL

语⾔所编写的程序。经编译后存储在数据库中。他可以接收参数,可以返回参数的,当然也可以没有参数。个⼈理解,他和程序中的函数差

不多,只不过他是在数据库中创建的。

存储过程分为系统存储过程和⾃定义存储过程

存储过程的优点:

1.存储过程只在创造时进⾏编译,以后每次执⾏存储过程都不需再重新编译,⽽⼀般SQL语句每执⾏⼀次就编译⼀次,所以使⽤存储过程

可提⾼数据库执⾏速度。 2.当对数据库进⾏复杂操作时(如对多个表进⾏Update,Insert,Query,Delete时),可将此复杂操作⽤存储过程封装

起来与数据库提供的事务处理结合⼀起使⽤。 这也是我愿意使⽤它的⼀个重要原因。

下⾯是⼀个带输⼊参数的⼀个存储过程

use LineManager

go

create proc ProcRegist

@CardNo varchar(10),

@StuNo varchar(11),

@Sex varchar(10),

@Grade varchar(10),

@ClassNo varchar(10),

@ChargeFee varchar(10),

@Name varchar(10),

@Department varchar(10),

@Explain varchar(50),

@UserName varchar(10),

@OperateDate date ---------------------输⼊参数

as

begin

begin transaction

insert into Student(StudentNo ,Name ,Sex ,Department ,Grade ,ClassNo ) values (@StuNo ,@Name ,@Sex ,@Department ,@Grade

,@ClassNo )

insert into Regist (CardNo ,StudentNo ,State ,Explain ,UserName ,OperateDate ) values(@CardNo ,@StuNo ,'使⽤'

,@Explain,@UserName ,@OperateDate )

insert into Charge (CardNo ,ChargeDateTime ,Charge ,UserName ,LastBalance ,CurrentBalance ,OrderState ,PrintState )values

(@CardNo ,@OperateDate ,@ChargeFee ,@UserName ,0,@ChargeFee ,'未结账','未打印')

if @@ERROR =0

commit transaction

else

rollback transaction -------------------将对表的⼀系列操作放到事务中,这样,如果,在对表的操作发⽣错误

时,可以回滚到发⽣错误之前,保证表的⼀致性

end

go ------------批处理语句要有头有尾,否则调⽤是不会出结果的。

------------执⾏此存储过程

execute ProcRegist '00','11','⼥','08信本','1','30','艳梅','数信','尝试⼀下','yanmei','2011/3/21'

excecute关键字 ,后⾯是此存储过程中你定义的参数。

3.存储过程可以重复使⽤,可减少数据库开发⼈员的⼯作量

4.安全性⾼,可设定只有某些⽤户才具有对指定存储过程的使⽤权

存储过程的缺点:

1:调试⿇烦,但是⽤ PL/SQL Developer 调试很⽅便!弥补这个缺点。

2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做⼯程型项⽬,基本不存在移植问题。

3:重新编译问题,因为后端代码是运⾏前编译的,如果带有引⽤关系的对象发⽣改变时,受影响的存储过程、包将需要重新编译(不

过也可以设置成运⾏时刻⾃动编译)。

4: 如果在⼀个程序系统中⼤量的使⽤存储过程,到程序交付使⽤的时候随着⽤户需求的增加会导致数据结构的变化,接着就是系统的

相关问题了,最后如果⽤户想维护该系统可以说是很难很难、⽽且代价是空前的,维护起来更⿇烦。

总结:任何事物都是两⾯性的,有其好的⽅⾯,也有坏的⽅⾯。重要的是⾃⼰把握平衡。