SQL server T-SQL存储过程

简介

   存储过程是由一些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

  今天的存储过程就到此为止了!Secret telling smile 晚安

猜你喜欢

转载自www.cnblogs.com/studydp/p/9027069.html