sqlserver的存储过程
一、存储过程概念
存储过程时一系列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