存储过程:之前在使用脚本的过程中,对过程和函数的概念区别为,函数是有返回值的,同时调用的方法也有差异之处,封装存储过程我学习过程中总结几个优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量.
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权.
5.存储过程能够实现较快的执行速度,如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划。而批处理的T-SQL语句每次运行都需要预编译和优化,所以速度就要慢一些。
6.存储过程减轻网络流量,对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。从而减轻了网络流量,降低了网络负载。
基本的语法:
ALTER PROCEDURE [dbo].[A_GetSpRule]
@PIPTACCID varchar(11)
AS
BEGIN
内容
END
Server 2000的存储过程存放位置在:
select * from sysobjects
基本实例:
if (exists (select * from sysobjects where name = 'pcTest1'))
drop proc pcTest1
go
create proc pcTest1 (
@id int, --默认输入参数
@Name varchar(20) out, --输出参数
@age varchar(20) output--输入输出参数
)
as
select @Name = EMP_Name, @age = Age
from Employee
go
--
declare @id int,
@Name varchar(20),
@temp varchar(20);
set @id = 2;
set @temp = 1;
exec pcTest1 @id, @Name out, @temp output;
select @Name, @temp;
print @Name + '#' + @temp;
--修改存储过程语法:
alter proc proc_student
as
select * from student;
建议命名规则:
无论学习什么语言,很多程序员都会对一些乱命名的同学深表痛苦,所以在这里也说一些细节
假如存储过程以sp_为前缀开始命名那么会运行的稍微的缓慢,这是因为SQL Server将首先查找系统存储过程,所以我们决不推荐使用sp_作为前缀。
存储过程的命名有这个的语法:
[proc] [MainTableName] By [FieldName(optional)] [Action] [ 1 ] [ 2 ] [ 3 ] [ 4 ] |
(1)所有的存储过程必须有前缀'proc'.所有的系统存储过程都有前缀"sp_",推荐不使用这样的前缀因为会稍微的减慢。
(2)表名就是存储过程访问的对象。
(3)可选字段名就是条件子句。例如:
procClientByCoNameSelect, procClientByClientIDSelect |
(4)最后的行为动词就是存储过程要执行的任务。
如果存储过程返回一条记录那么后缀是:Select
如果存储过程插入数据那么后缀是:Insert
如果存储过程更新数据那么后缀是:Update
如果存储过程有插入和更新那么后缀是:Save
如果存储过程删除数据那么后缀是:Delete
如果存储过程更新表中的数据(ie. drop and create)那么后缀是:Create
如果存储过程返回输出参数或0,那么后缀是:Output