SQL Server 存储过程

SQL Server 存储过程

存储过程是独立于数据表之外的数据库对象,是SQL语句和控制流语句的集合,它可以由客户,其他过程或触发器调用。
其参数可以被传递和返回,其出错代码也可以被检验。


SQL Server 包括的存储过程

  1. 系统存储过程

    主要存储在Master数据库并以sp_为前缀,从系统表中获取信息,从而为系统管理员管理SQL Server提供支持.

  2. 用户自定义存储过程.

    由用户创建,并能完成某一特定功能的存储过程.

  3. 临时存储过程

    分为局部临时存储过程全局临时存储过程

在该过程前面加# 或 ##表示

‘#’ 表示本地临时存储过程

‘##’ 表示全局临时存储过程

  1. 扩展存储过程
    SQL Server 可以动态加载和执行的动态链接库(DLL)

存储过程的功能特点

  1. 接收输入参数并以输出参数的形式为调用过程或批处理返回多个值.
  2. 包含执行数据库操作的编程语句,包括执行其他过程.
  3. 为调用过程和批处理返回一个状态值,以表示成功或失败.

创建存储过程

-- 不带参数的存储过程
create procedure goods_info 
as 
select goods_name,classification_name,unit_price
from goods g inner join goods_classification gc
on g.classification_id = gc.classification_id; 



-- 创建带参数的存储过程
-- 查询商品单价
create procedure price_goods @goods_name  varchar(80)=NULL,
                            @price_goods real output
as
select @price_goods = unit_price
from goods
where goods_name=@goods_name

执行存储过程

如果是批处理的第一条语句,直接通过名字即可调用.
不是存储过程第一条语句的话,使用Execute关键字执行存储过程.


execute goods_info;

goods_name  classification_name unit_price
IBM R51 笔记本计算机  9999.00
旭日 160-D1.7G    笔记本计算机  9499.00
NEC S3000   笔记本计算机  9900.00
HP1020  激光打印机   1550.00
Canon LBP2900   激光打印机   1380.00
HP3938  喷墨打印机   450.00
LS-106C 交换机         2500.00

执行带参数的存储过程

-- 执行
-- 创建一个变量,用于接收返回的值
declare @price real
-- 执行时加上参数
exec price_goods 'Canon LBP2900',@price output
select @price;

修改存储过程

alter procedure ….
as
……

ALTER PROCEDURE employee_dep
WITH ENCRYPTION AS   -- 对存储过程进行加密
SELECT employee_name ,sex, address,department_name
FROM employee e INNER JOIN department d
on e.department_id = d.department_id
WHERE sex='男'
GO

删除存储过程

drop procedure employee_dep
go

SQL Server 存储过程和函数的区别

Oracle中存储过程和函数的区别

这里写图片描述
本质上没区别。
只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。
而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
执行的本质都一样。

函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
  1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
  2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
  3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
  4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
    Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值