【存储过程】
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
【格式】
一.创建存储过程
<span style="font-size:18px;">CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END</span>
二.调用存储过程
<span style="font-size:18px;"> exec sp_name [参数名]</span>
三.删除存储过程
<span style="font-size:18px;">drop procedure sp_name</span>
【优点】
1、 存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。
2、可保证数据的安全性和完整性。
(1)通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
(2) 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
3、 在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
4、可以降低网络的通信量。
5、使体现企业规则的运算程序放入数据库服务器中,以便:
(1)集中控制。
(2) 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。
【举例】
1、我在注册中用的存储过程,可以来用它来举例。
<span style="font-size:18px;">ALTER PROCEDURE [dbo].[pro_Register]
-- Add the parameters for the stored procedure here
@cardno char(12),
@studentNo char(12),
@studentName char(12),
@sex char(6),
@department char(12),
@grade char(12),
@class char(12),
@explain varchar(50),
@type char(6),
@cash numeric(8, 0),
@date char(12),
@time char(10),
@status char(6),
@userID char(12),
@checkstatus char(6)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements
-- Insert statements for procedure here
insert into T_Card (chr_StudentNo ,chr_Cardno ,Nmc_Cash,chr_UserID ,chr_Type,chr_Status ,chr_Checkstatus ,de_Date ,te_Time )values(@studentNo ,@cardno ,@cash,@userID ,@type,@status ,@checkstatus ,@date,@time )
insert into T_Student(chr_StudentNo ,chr_StudentName ,chr_Sex ,chr_Department ,chr_Grade ,chr_Class ,chr_Explain ,de_Date ,te_Time)values(@studentNo ,@studentName ,@sex ,@department ,@grade ,@class ,@explain ,@date ,@time)
insert into T_Recharge (chr_CardNo ,dec_Addmoney,te_RechargeTime ,de_RechargeDate ,chr_UserID ,chr_Checkstatus )values(@cardno ,@cash ,@time ,@date ,@userID ,@checkstatus )
</span>
<span style="font-size:18px;">END
</span>
2、 在D层中的应用
<span style="font-size:18px;"> Public Function AddStd(Student1 As Entity.Student1) As Boolean Implements IDAL.IStudent1.SelectSdtNo
'判断卡号是否存在
'中间变量,用于存储从数据中查找到的信息
Dim sqlStd As String
Dim sqlParams As SqlParameter() = {New SqlParameter("@CardNo", Student1.cardno),
New SqlParameter("@studentNo", Student1.studentNo),
New SqlParameter("@studentName", Student1.studentName),
New SqlParameter("@sex", Student1.sex),
New SqlParameter("@department", Student1.department),
New SqlParameter("@grade", Student1.grade),
New SqlParameter("@class", Student1.classes),
New SqlParameter("@cash", Student1.cash),
New SqlParameter("@explain", Student1.explain),
New SqlParameter("@status", Student1.status),
New SqlParameter("@type", Student1.type),
New SqlParameter("@date", DateTime.Now),
New SqlParameter("@time", DateTime.Now),
New SqlParameter("@UserID", Student1.UserID),
New SqlParameter("@checkstatus", "未结账")
}
sqlStd = "pro_Register"
Dim dtSQL As Integer
dtSQL = sqlHelper.ExecAddDelUpdate(sqlStd, CommandType.StoredProcedure, sqlParams)
If dtSQL > 0 Then
Return True
Else
Return False
End If
Return dtSQL
End Function</span>
好了今天就写到这里了。。。。。下次给你们介绍新的知识哦。。。。。。