简介:
存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。
自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功,
存储过程并不能像函数那样被直接调用,只能利用 execute 来执行存储过程。
优点:
1、提高应用程序的通用性和可移植性:存储过程创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。并且数据库专业人员可以随时对存储过程进行
修改,且对程序源代码没有影响,这样就极大的提高了程序的可移植性。
2、可以提高SQL的速度,存储过程是编译过的,如果某一个操作包含大量的SQL代码或分别被执行多次,那么使用存储过程比直接使用单条SQL语句执行速度快的多。
3、减轻服务器的负担:当用户的操作是针对数据库对象的操作时,如果使用单条调用的方式,那么网络上还必须传输大量的SQL语句,如果使用存储过程,
则直接发送过程的调用命令即可,降低了网络的负担。
缺点:
- 数据库移植不方便,存储过程依赖与数据库管理系统, SQL Server 存储过程中封装的操作代码不能直接移植到其他的数据库管理系统中。
- 不支持面向对象的设计,无法采用面向对象的方式将逻辑业务进行封装,甚至形成通用的可支持服务的业务逻辑框架.
- 代码可读性差,不易维护。不支持集群。
(1)创建一个无参的存储过程
创建名为 GetABank 的无参数存储过程 alter procedure GetABank as begin select * from [dbo].[ABank] end --执行名为 GetABank 的无参数存储过程 execute GetABank
(2)创建一个参数的存储过程
create proc searcABank(@aID int) as --要求book_id列与输入参数相等 select * from [dbo].[ABank] where aid=@aID --执行searchBooks go
(3)创建一个带返回值的存储过程output方式
create proc [dbo].[InsertABank] ( @aname nvarchar(50) , @money int , @sex nvarchar(50) , @id int OUTPUT --输出 ) AS BEGIN INSERT INTO [dbo].[ABank] (aname,money,sex) values(@aname,@money,@sex ) SET @id = @@IDENTITY --赋值 END
go declare @ids int exec InsertABank 's',1,'2',@ids output --执行存储过程 select @ids --查询
(4)创建一个带返回值的存储过程return方式
create PROC insertUsersOutPut @aname nvarchar(50), @money int, @sex nvarchar(50) as INSERT INTO [dbo].[ABank] (aname,money,sex) VALUES(@aname,@money,@sex) return @@identity go declare @id int exec @id=insertUsersOutPut '1',1,'2' select @id
return 数据类型只能返回INT类型参数 个数只有一个return执行后将退出程序
output 不限定数据类型 返回值可以根据声明的OUTPUT对象的个数获取多个