简介
存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而且它们同样有输入参数和输出参数
存储过程的好处:
1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。
2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。
创建存储过程
CREATE PROC[EDURE] 存储过程名 @参数1 数据类型 = 默认值 OUTPUT, …… , @参数n 数据类型 = 默认值 OUTPUT AS SQL语句 GO
1. 只返回单一记录集的存储过程
CREATE PROC Newfolder AS select * from student
GO exec Newfolder --调用存储过程
2.有返回值的存储过程
create proc insetfile @returnrow int output as insert into F_HSZ(id,FID,UID) select NEWID(),'1','2' set @returnrow=1 go --调用用带有返回值的存储过程 declare @returnrow int exec insetfile @returnrow OUTPUT print @returnrow
3.有输入参数和输出参数的存储过程
create proc insetfile @id varchar(100) @returnrow int output as declare @Nid varchar(100) --存储过程声明临时变量 select @Nid=id from Fole where id=@id insert into F_HSZ(id,FID,UID) select NEWID(),'1',@Nid set @returnrow=1 go --调用带有输入输出参数的存储过程 declare @returnrow int exec insetfile '20', @returnrow OUTPUT print @returnrow
4.在存储过程中使用事物
create proc insetfile @retunrow int output as declare @error int =0 --事务中操作的错误记录 declare @trancount int Set NOCOUNT ON; --on表示不返回计数 SET NOCOUNT { ON | OFF } Set XACT_ABORT ON; --当执行事务时,如果出错,会将transcation设置为uncommittable状态 print @@trancount begin try begin tran insert into F_HSZ(id,FID,UID) select NEWID(),'1','22' insert into F_HSZ(id,FID,UID) select NEWID(),'1',2 set @retunrow=1 commit tran return @retunrow end try begin catch if xact_state()=-1 begin rollback tran; --回滚事务 set @retunrow=0 return @retunrow end end catch set xact_abort off; go
设置 xact_abort on/off , 指定是否回滚当前事务,为on时如果当前sql出错,回滚整个事务,为off时如果sql出错回滚当前sql语句,其它语句照常运行读写数据库
今天的存储过程就到此为止了! 晚安