【机房重构】——存储过程的运用

What ?

   个人认为,存储过程说白了就是一堆SQL的合并,中间加了点逻辑控制,在组合查询的存储过程中深有体现。

   官方解释:存储过程

  还是一堆SQL语句的意思,O(_)O哈哈~


Why?

    为什么要用存储过程,是为了解决什么?利弊?    

  • 利:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,可提高数据库执行速度。(这是我听说的涉及到原理性的问题,具体内部如何执行,小编也不知道呢,不过你记住就好!)

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),如果不用存储过程,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了,使系统对数据库的访问变得简单。

3.存储过程可以重复使用,可减少数据库开发人员的工作量。

所以,存储过程是用来当一个业务同时对多个表进行处理的时候比较合适。解决了速度慢,过多连接数据库,减少代码等的问题。

  • 弊:

    1、可移植性差,会依赖死数据库。切换数据库比较麻烦,比如从sqlserver切换到mysql。因为存储过程是依赖于具体的数据库的。

    2、数据库的任务应该是专注于存储数据,至于业务逻辑的实现,交给程序来实现灵活扩展。数据库负责提供数据,至于拿到数据后,怎么处理,交给应用程序来,想怎么弄就怎么弄,视情况而定吧!


 How ?

    怎么运用

    第一步:新建存储过程 


       第二步:存储过程模板

 ALTER PROCEDURE  [存储过程的命名]
         ……
       定义参数
         ……
 AS
 Declare
       声明变量
 BEGIN
    	……
      带业务逻辑的SQL语句
        ……      
 END

       第三步:套用上面的模板

ALTER procedure [dbo].[PROC_GroupCheck]  
    @Comboa1 varchar(20),
    @Comboa2 varchar(20),
    @Comboa3 varchar(20),
    @Combob1 varchar(20),   
    @Combob2 varchar(20),
    @Combob3 varchar(20),
    @Combod1 varchar(20),
    @Combod2 varchar(20),
    @txtc1 varchar(20), 
    @txtc2 varchar(20), 
    @txtc3 varchar(20),
    @tableName varchar(20)    
as  
declare @TempSql varchar(500)
BEGIN      
    SET @TempSql='SELECT * FROM '+@tableName +' WHERE ' +@Comboa1 +@Combob1+char(39) + @txtc1 + char(39)     
     if (@Combod1!='')  
    BEGIN      
        SET @TempSql=@TempSql+@Combod1+CHAR(32)+@Comboa2 +@Combob2+CHAR(39)+@txtc2+CHAR(39)   
        if (@Combod2!='')  
        BEGIN      
        SET @TempSql=@TempSql+@Combod2+CHAR(32)+@Comboa3+@Combob3+CHAR(39)+@txtc3+CHAR(39)      
        END      
  END  
EXECUTE(@TempSql)     
end

   第四步:如何调用存储过程

    Public Function selectGroupCheck(GroupCheck As GroupCheckEntity) As DataTable Implements GroupCheckIDAL.selectGroupCheck
        Dim sqlParams As SqlParameter() = {New SqlParameter("@Comboa1", GroupCheck.Comboa1),
                                          New SqlParameter("@Comboa2", GroupCheck.Comboa2),
                                          New SqlParameter("@Comboa3", GroupCheck.Comboa3),
                                          New SqlParameter("@Combob1", GroupCheck.Combob1),
                                          New SqlParameter("@Combob2", GroupCheck.Combob2),
                                          New SqlParameter("@Combob3", GroupCheck.Combob3),
                                          New SqlParameter("@Txtc1", GroupCheck.Txtc1),
                                          New SqlParameter("@Txtc2", GroupCheck.Txtc2),
                                          New SqlParameter("@Txtc3", GroupCheck.Txtc3),
                                          New SqlParameter("@Combod1", GroupCheck.Combod1),
                                          New SqlParameter("@Combod2", GroupCheck.Combod2),
                                          New SqlParameter("@TableName", GroupCheck.TableName)} '设置参数 
        sql = "PROC_GroupCheck" '调用存储过程
        table = sqlHelperObject.ExecSqlSelect(sql, CommandType.StoredProcedure, sqlParams)
        Return table
    End Function
End Class



评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值