码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver的存储过程

时间:2020-07-10 19:04:41      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:保存   compile   语法   提升   where   网络通信   t-sql   te pro   sys   

一、存储过程概念

存储过程时一系列T-sql的集合,除了能进行正常的增删改查,还有逻辑控制,并可以设置输入、输出参数,返回值,可以接受多个结果集。

存储过程的优点:

1、运行速度快

  存储过程是一系列T-sql经过编译后保存的数据库中,相比于多条sql每次编译运行,能直接提升数据库中的运行速度。

  其次,对存储过程的的调用只是调用一次名称,同样可以减少网络通信耗时,并减少网络通道的占用。

2、便于修改

  如果不修改存储过程的名称和参数,修改存储过程的逻辑,并不会导致代码调用失败。项目源代码无需更改。

3、保证数据安全

  通过权限的设置,让某些用户通过存储过程来调用用户无法操作的数据,保证数据安全。

二、存储过程语法

CREATE PROC procedure_name [ ; number ]
  [ { @parameter data_type } [ = default ]  [ OUTPUT ]]

  [ ,...n ]

 

[ WITH  [RECOMPILE] [ENCRYPTION] ]

AS
begin

end

参数介绍:

procedure_name  :存储过程名称,不能现有的数据库对象冲突,如表名、存储过程名等

;number  :一个整数值,表示同一个存储过程名下的分组,如:procedure_name;1 procedure_name;2 procedure_name;3可以通过名称删除一组存储过程。

@parameter  :参数名,必须加@

data_type  :参数类型

=default  :默认值

output  :输出参数标识,加上之后就代表是输出参数

recompile  :不会缓存该改存储过程,在运行时,重新编译

encryption  :加密

as  :之后的存储过程的的逻辑,begin开始end结束。

 

存储过程实例:

use custom
go
if exists (select * from sys.objects where name=get_emp_count)
begin
drop procedure get_emp_count
end
go

create procedure dbo.get_emp_count
        @age int,
        @count int output
        
as
begin
--为on时结果中不返回受影响的行数,提高查询效率,只在改批处理域中生效。
set nocount on;
select @count=count(*) from emp where age=@age
select * from emp

end
go

create procedure语句必须是批处理的第一句,所以必须加go。

调用:

--测试
declare @result_count int
--调用带返回参数的存储过程时,参数后面要加output
--execute get_emp_count @age=22,@count=@result_count output
execute get_emp_count 22,@result_count output
--select @result_count as count
select count=@result_count

--打印该变量
print @result_count
go

 

sqlserver的存储过程

标签:保存   compile   语法   提升   where   网络通信   t-sql   te pro   sys   

原文地址:https://www.cnblogs.com/whalesea/p/13280514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!