[置顶] 个人机房重构——存储过程

         SQL server中的存储过程在刚刚接触数据库知识的时候,仅限于听说,通过这次机房重构,对SQL server的强大有了更加深刻的理解。存储过程的使用也极大地方便了我们在机房重构过程中对数据库中数据的操作。那么让我们来看看存储过程的神奇之处吧!

概述

        存储过程(Stored Procedure)是使用Transact-SQL语言编写的一段能实现指定功能的程序。其次,这种程序被SQL Server编译好后,存放在SQL Server数据库中。用户可以通过存储过程的名称和参数传递调用这些具有指定功能的存储过程。存储过程也是数据库对象。人们通常使用存储过程提高数据库的安全性和减少网络通信数据量。

优点

使用存储过程有以下几个优点:
1)执行速度快,效率高:因为SQL Server会事先将存储编译成二进制可执行代码,所以在运行存储过程时,SQL Server不需要在对存储过程进行编译,可以加快执行的速度。
2)模块式编程:存储过程在创建完毕之后,可以在程序中对此被调用,而不必重新编写改T-SQL语句。在存储过程创建之后,也可以 对存储过程进行修改,而且一次修改之后,所有调用改存储过程的程序所得到的程序结果都会被修改,提高了程序的可移植性。
3)减少网络流量:由于存储过程是存储在数据库中,所以使用的时候只需要传一个指定那个存储过程的参数就可以了,所以减少了网络流量,提高运行速度。
4)安全性:存储过程可以作为一种安全机制来使用,对于不同的用户权限调用不同的存储过程。

创建方法

创建方法可以有两种,一种是通过SQL语句来进行创建,一种是通过SQL Server Management Studio。方法不同,但使用起来都很方便,可以根据自己需要选择。

SQL语句

--创建存储过程PROC_GetStudent

CREATE PROC PROC_GetStudent
AS 
SELECT *
FROM Student_Info

GO 

--调用存储过程
EXEC PROC_GetStudent



SQL Server Management Studio

1)创建过程如图所示:

                   [置顶] 个人机房重构——存储过程_第1张图片

存储过程编写

本文以机房收费系统退卡为例,介绍一下如何实现存储过程功能。

------------------------
--应用:注册功能
--操作:添加退卡信息到CancelCard_Info和修改卡号状态
--制作:王洪玉
--时间:2016/2/19
------------------------

CREATE PROCEDURE PROC_CancelCard
   @CardNo varchar(15),             --定义传递的参数类型
   @UserID varchar(10),
   @Date date,
   @Time time(7)


   AS

   Declare
   @cancelMoney decimal(18,0)      --声明变量

  begin

  --执行查询语句将查询到的金额传给参数
  Select @cancelMoney=Cash From Card_Info Where CardNo=@CardNo          

--向Cancel_Info表中添加退卡数据
   INSERT INTO CancelCard_Info(CardNo,CancelCash,Date,Time,UserID) values
  (@CardNo,@cancelMoney,@Date,@Time,@UserID)

--修改card状态
   Update Card_Info Set Status='未使用', Cash='0' WHERE CardNo=@CardNo
  
 END


D层的调用

既然已经编写好存储过程,那么我们来看看D层是如何使用存储过程的。
    Public Function ICancelCard(ByVal Rcard As Entity.EN_StudentInfo) As Integer Implements ICancelCardDAL.ICancelCard
        Dim sqlhelper As New SQLHelper.SqlHelper
        Dim cmdText As String
        Dim intCard As Integer

        cmdText = "PROC_CancelCard"       '将存储过程名称赋值给定义的字符串
        Dim paras As SqlParameter() = {New SqlParameter("@CardNo", Rcard.CardNo),              '传递D层的参数
                                       New SqlParameter("@UserID", AllUse.AllUserID),
                                       New SqlParameter("@Date", Rcard.DateNow),
                                       New SqlParameter("@Time", Rcard.Time)
                                      }
        intCard = sqlhelper.ExecAddDelUpdate(cmdText, CommandType.StoredProcedure, paras)      '调用SQLHelper,查询数据,需要注意的                                                                                                '是使用CommandType.StoredProcedure,                                                                                                '不然无法识别该存储过程。
        Return intCard     '返回查询结果
    End Function


总结:对于新知识和没有接触过的知识,要敢于尝试,接受加理解才是学习的王道。所以,在我们接触到新的知识的时候,将他应用于实践,会让我们学习起来起到事半功倍的效果。多实践,多总结这也许是最好的学习方法了吧!



你可能感兴趣的:([置顶] 个人机房重构——存储过程)