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

xiaoxiao2021-02-28  140

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

转载请注明原文地址: https://www.6miu.com/read-24316.html

最新回复(0)