【机房重构】存储过程

【存储过程】      

      存储过程(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>

    好了今天就写到这里了。。。。。下次给你们介绍新的知识哦。。。。。。






   

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值