SQL Server—存储过程

一,存储过程

1.1 定义

存储过程是一个预编译的语句集,存储在数据库中。它允许模块化设计,也就是说编译一次之后,永久有效。通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

1.2 作用

  • 响应时间快,可以带来运行效率提高的好处
  • 存储过程运行更加稳定,不会出现太多错误
  • 存储过程主要是在服务器上运行,减少对客户机的压力
  • 可以接受输入输出值,返回结果集以及返回值,用处灵活

1.3 优缺点

优势:

只需要创建一次,就可以重复的使用,减少了数据库人员的工作量;参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

缺点:

维护性较差,相对于简单的SQL语句,存储过程并没有什么优势,并且在进行调试时比较困难。

二,存储过程的创建和调用

  1. 无参:
--创建不带参数的存储过程
go
create proc cp_selectBooks  --创建一个存储过程cp_selectBooks
as
select * from Books
--调用
exec cp_selectBooks

调用结果:
在这里插入图片描述

  1. 带输入参数:
--创建带参数的存储过程
go
create proc cp_selectBooks_ByName
(
    @name nvarchar(50)

)
as
select * from Books where Name like '%'+@name+'%'
--调用
exec cp_selectBooks_ByName '建筑'

调用结果:
在这里插入图片描述

  1. 带输入,输出参数
--带输入,输出参数
--进行模糊查询,返回记录数还要返回记录
go
create proc cp_select_books
(
   @name nvarchar(50),
   @rowcount int out
)
as 
select * from Books where Name like '%'+@name+'%'
select @rowcount=COUNT(*) from Books where Name like '%'+@name+'%'
--调用
go
--定义一个变量,接受返回值@rowcount
declare @rows int
exec cp_select_books '建筑',@rows out
print @rows

调用结果:
在这里插入图片描述
说明:
out表示返回值参数,类型可以使用任意Oracle中的合法类型。
@name表示输入参数
@rowcount表示输出参数

三,存储过程和函数的区别?

存储过程是用户定义的一系列SQL语句的集合,而函数通常是数据库已定义的方法,具体区别如下:

  1. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象.

  2. 函数必须有返回值,存储过程可有可无

  3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一部分来调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值