【机房重构】--存储过程(下机实践)
来源:互联网 发布:淘宝天猫运营招聘 编辑:程序博客网 时间:2024/06/01 22:20
前言:
之前觉得存储过程是很高大上的东西,听说还不能滥用,所以一直有些避讳,但是这并不是“富人”,接受+学习的思维方式。不管什么东西肯定都是需要多方面看待的,重点是我们需要先了解,接受,然后去学习和发现有什么样的优缺点,不能听别人说什么就是什么,实践过才有发言权嘛。
简单了解
- where from:
- 从哪来?SQL语句,存储过程是建立在SQL语句的基础上的。
- why / when / where to go:
- 为什么用? 涉及到多表操作的时候,D层的负担会很大,存储过程可以给D层减负。
- what:
- 是什么? SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它存储过程是一堆SQL语句的集合。 其实就是为了实现对数据库某些操作的一堆SQL语句,编译之后可以在D层中调用。
- How:
- 怎么用,后面有下机实例展示。
- 全面看待
- 优点:
- 重复使用,提高性能,安全防注入
- 缺点:
- 调试不便,不利于重新编译,后期维护不便,没有解耦和
- 优点:
对比触发器
- 相同点在于:
本质上都是SQL语句集,可以说触发器是特殊的存储过程。当用户执行某一特殊操作的时候,使数据库需要多处更新时,我们可以考虑采用触发器或者存储过程,给D层减负。 - 不同点
- 触发器是强制执行的,不需调用,只要满足了提前设定的触发条件,触发器便会自动执行设定操作。而存储过程是需要在程序中调用的。
- 触发器是通过事件执行出发而被执行的,比如说我们对表进行增删改操作时,SQL server会自动执行触发器定义的增删给语句,这便是最直观的触发操作。
下机实践
数据库中操作
创建方式有两种,SQL语句创建和手动创建。这个不解释不展示,大家自行脑补或查询。
-- =============================================-- Author: <Hepburn Yang>-- Create date: <Create Date,,>-- Description: <Description,,>-- =============================================ALTER PROCEDURE [dbo].[Pro_Offline] -- 用到的参数,以及参数类型 -- 备注:存储过程中声明的所有变量,都必须在D层中赋予一个初值。 @CardNo char(10), @OffDate Date , @OffTime time(7), @ConsumeTime numeric(18,1), @ConsumeCash numeric(18,1), @RemainCash numeric(18,1), @IsCheck char(10) ASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --更新line表 update T_Line set offDate =@OffDate ,offTime =@OffTime ,consumeTime =@ConsumeTime ,consumeCash =@ConsumeCash ,remainCash =@RemainCash ,isCheck =@IsCheck where cardNo =@CardNo --删除online表记录 delete T_Online where cardNo =@CardNo --更新Card余额 Update T_Card set remainCash =@RemainCash where cardNo =@CardNo END
程序的调用
Public Function IupdateInfo(OfflineInfo As LineEntity) As Boolean Implements ILineDAL.IupdateInfo Dim SQLHelper As DAL.SqlHelper = New DAL.SqlHelper() Dim Sql As String = "Pro_Offline" '调用存储过程 Dim result As Integer Dim Sqlparams As SqlParameter() = {New SqlParameter("@CardNo", OfflineInfo.CardNo), New SqlParameter("@OffDate", OfflineInfo.OffDate), New SqlParameter("@OffTime", OfflineInfo.OffTime), New SqlParameter("@ConsumeCash", OfflineInfo.ConsumeCash), New SqlParameter("@ConsumeTime", OfflineInfo.ConsumeTime), New SqlParameter("@RemainCash", OfflineInfo.RemainCash), New SqlParameter("@IsCheck", OfflineInfo.IsCheck)} result = SQLHelper.ExecNonQuery(Sql, CommandType.StoredProcedure, Sqlparams) If result <> 0 Then Return True Else Return False End If End Function
这样就可以完成同时更新三张表的操作了。有没有很方便?
总结
认识一个事物时用到了一个很棒的套路–门卫思维,where,why ,what ,how ,when 。这些问题需要自己问自己,然后全面分析这个事物。
阅读全文
0 0
- 【机房重构】--存储过程(下机实践)
- 机房重构下机(职责链+策略+反射+存储过程)
- 机房重构---下机
- 【机房重构】——上下机之思考过程
- 【机房重构】下机——职责链模式+策略模式(实践篇)
- 机房重构之下机
- 【机房重构】存储过程
- 【机房重构】存储过程
- 【机房重构】存储过程
- 机房重构--存储过程
- 【机房重构】-存储过程
- 机房重构存储过程
- 机房收费系统重构(7)——下机
- 【机房重构】奋斗上下机
- 【机房重构】策略模式之下机
- 机房重构(3)——存储过程
- 【机房重构】——存储过程(Stored Procedure)
- 【机房重构】SQl之存储过程
- Magento 2 的架构原则
- Phinx Migration 小记
- iptables
- 二进制
- ThinkPHP5 数据迁移 migration 填坑记
- 【机房重构】--存储过程(下机实践)
- IMWeb提升营Day5 | 训练题30:连续数组的最大和
- 时种绘画(部分代码调用的函数说明)
- c++字符串
- Unity3D在不同父子关系里获取方法的不同
- 分支的创建与管理
- 老板喜欢提拔什么样的员工
- Java初遇线程池
- 安卓轻松实现清理缓存