存储过程
一 存储过程的概念
存储过程是在数据库管理系统保存的,预先编译的,能实现某种功能的SQL程序,它是数据库应用中运用比较广泛的一种数据对象。
为什么需要存储过程?
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
存储过程的优点:
1.模块化程序设计
2.执行速度块,效率高
3.减少网络流量
4.具有良好的安全性
二 系统存储过程
SQL_SERVER 提供系统存储过程,它们是一组预编译的T-SQL语句,系统存储过程提供了管理数据库和更新表的机制,并充当从系统表中检索信息的快捷方式。
|
三 用户自定义的存储过程
1.创建不带参数的存储过程
Create proc usp_selectstu
As
Select StudentName,Gender,GradeId,Phone from dbo.Student
调用存储过程:exec usp_selectstu
2.创建带入参数的存储过程
Create proc usp_stuInfo @gradeid int=2 (默认)
As
Select * from student where gradeId=@gradeid
调用存储过程:exec usp_stuInfo 2
3.创建带出参数的存储过程
create proc usp_selectGrade @name nvarchar(10),@gradeid int output
As
Select @gradeid=gradeid from student where studentname=@name
print @gradeid
调用存储过程:
declare @id int
exec usp_selectGrade '李小龙',@id output
4、 带通配符参数存储过程
Create proc usp_one @name nvarchar(10)
as
select * from dbo.Student where StudentName like @name
exec usp_one '李%'
5、 不缓存存储过程
缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下。这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰值时(预留内存根据系统默认预留使用为准,至少4M),才会清除一些缓存释放少量的内存为新的缓存腾出空间。
这些内存一般都是Sql Server运行时候用作缓存的,例如你运行一个select语句, 执行个存储过程,调用函数;
1. 数据缓存:执行个查询语句,Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来,下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。
2.执行命令缓存:在执行存储过程,自定函数时,Sql Server需要先二进制编译再运行,编译后的结果也会缓存起来, 再次调用时就无需再次编译。
create proc proc_temp
with recompile
as
select * from student
exec proc_temp
6,加密存储过程
exec sp_helptext 储存过程名 可以查看储存过程代码
create proc proc_temp_encryption
with encryption
as
select * from student;
go
--存储过程的内容不会被轻易看到(虽然解密也是有可能的)。
--应用这个,我们可以对某些关键的存储过程进行加密。
--但此时,存储过程仍然能被execute、alter和drop。
exec proc_temp_encryption;
exec sp_helptext 'proc_temp'
exec sp_helptext 'proc_temp_encryption'
(注意:加密存储过程前应该备份原始存储过程,且加密应该在部署到生产环境前完成。)