一、存储过程的定义和概括:
存储过程就是通过将实现某个常用或是复杂的功能的SQL语句事先编写好并声明一个名字保存在数据库的一串SQL代码。
那么有人就会有疑问了,既然存储过程就是一串SQL语句,那我们还为什么要单独的弄这样一个技术能。接下来我们就来看看存储过程的有点。
存储过程的优点:
1)、可重复使用。类似于方法,从而减少数据库开发人员的代码量。
2)、提高性能:存储过程再创建的时候就经过了编译,再次使用的时候不需要再次编译。而一般的SQL语句再次使用的时候不但要再次缀写编码而且也要进行再次编译。
3)、减少网络流量。存储过程存储在服务器上,调用的时候只需要给出存储过程的名称和参数即可,因此减少了网络传输数据量。
4)、安全性。参数化的存储过程可以防止注入攻击。
二、存储过程的创建:
创建语法: CREATE PROC [EDURE] procedure_name[;number] [{@parameter data_type} [VARYING][=default][OUTPUT]] [,...n] [WITH {RECOMPILE|ENCRYPTION|RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] --参数含义 procedure_name: 存储过程名称,后跟的number必须为数字,是为了区分一组同名的存储过程。一个数据库中存储过程的名字比喻唯一。 @parameter:是存储过程的参数。在Create Procedure 语句中,可以声明一个或多个参数。当调用该存储过程时,用户必须给出所有的参数值,除非定义了参数的缺省值。若参数的形式以 @parameter=value 出现,则参数的次序可以不同,否则用户给出的参数值必须与参数列表中参数的顺序保持一致。若某一参数以@parameter=value 形式给出,那么其它参数也必须以该形式给出。一个存储过程至多有1024 个参数。@开头表示局部变量,@@开头表示全局变量。 data_type:数据类型。在存储过程中,所有的数据类型包括text 和image 都可被用作参数。但是,游标cursor 数据类型只能被用作OUTPUT 参数。当定义游标数据类型时,也必须对VARING 和OUTPUT 关键字进行定义。对可能是游标型数据类型的OUTPUT 参数而言,参数的最大数目没有限制。 VARYING:指定OUTPUT参数支持的结果集,仅用于游标的定义。 default:是指参数的缺省值。如果定义了缺省值,那么即使不给出参数值,则该存储过程仍能被调用。缺省值必须是常数,或者是空值。 OUTPUT:表明该参数是一个返回参数。用OUTPUT 参数可以向调用者返回信息。Text 类型参数不能用作OUTPUT 参数。 RECOMPILE:指明SQL Server 并不保存该存储过程的执行计划,该存储过程每执行一次都又要重新编译。 ENCRYPTOIN:表明SQL Server 加密了syscomments 表,该表的text 字段是包含有Create procedure语句的存储过程文本,使用该关键字无法通过查看syscomments 表来查看存储过程内容。 FOR REPLICATION:选项指明了为复制创建的存储过程不能在订购服务器上执行,只有在创建过滤存储过程时(仅当进行数据复制时过滤存储过程才被执行),才使用该选项。FOR REPLICATION与WITH RECOMPILE 选项是互不兼容的。 AS:表面该存储过程要执行的动作。 sql_statement:是任何数量和类型的包含在存储过程中的SQL 语句。
小例子:
下面来个小例子: CREATE PROC userquery @username varchar(20) @password varchar(20) AS BEGIN select * from userinfo where username=@username and password=@password END GO ----------------------------------------------------- 运行 exec userquery @username="admin" @password="123456" ------------------------------------------------------ 结果: username password admin 123456