定义:存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
通俗地说,存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。 存储过程的优点: 1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。 2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。 4.允许标准组件式编程。存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。 创建存储过程:1 CREATE PROCEDURE procedure_name2 [WITH ENCRYPTION]3 [WITH RECOMRILE]4 AS5 sql_statement
1 EXEC procedure_name
------------------------------------------------------------------------------------------------------------- 带参数的存储过程:想存储过程设定输入、输出参数的主要目的是通过参数向存储过程输入和输出信息来扩展存储存储过程的功能。 通过设定参数,可以多次使用同一存储过程并按用户要求查找所需要的结果。 1.带输入参数的存储过程:
1 CREATE PROCEDURE procedure_name2 @parameter_name datatype=[default]3 [WITH ENCRYPTION]4 [WITH RECOMPILE]5 AS6 sql_statement
注: @parameter_name 存储过程的参数名,必须以@为前缀 Datatype 参数的数据类型 Default 参数的默认值,如果执行存储过程时为提供该参数的变量值,则使用default值。 范例:
1 CREATE PROCEDURE p_book1p2 @出版社 varchar(20)3 AS4 SELECT * FROM book15 WHERE 出版社= @ 出版社
执行存储过程,使用参数名传递参数值
1 EXEC Procedure_name2 [@parameter_name = value]3 [,...n]
1 EXEC parameter_name2 [value1,value2,...]
2.带输出参数的存储过程 如果需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来是想,为了使用输出参数,需要在CREATE PROCEDURE 语句中指定OUTPUT关键字。 输出参数语法如下: @parameter_name datatype = [default] OUTPUT 例:创建存储过程p_book1Num,要求能根据用户给定的出版社,统计出该出版社的出书数量,并将数量以输出变量的形式返回给用户。
1 CREATE PROCEDURE P_book1Num2 @出版社 VARCHAR(20), @book1Num smallint output3 AS4 SET @book1Num =5 (6 SELECT COUNT(*) FROM book17 WHERE 出版社=@出版社8 )9 PRINT @book1Num
1 DECLARE @出版社 VARCHAR(20), @book1Num SMALLINT2 SET @出版社='中国长安'3 EXEC p_book1Num @出版社,@book1Num