SQL Server 为代码减负之存储过程
存储过程能够用来提高数据库的查询效率。由于它事先被编译过。被储存于内存中,每次执行前。不必被从新编译,所以效率非常高。
存储过程是一组sql增删改查的集合,假设程序中的一个功能涉及到对数据库的多次操作。那么就能够事先编译好存储过程。以提高程序执行效率!
简单查询:
CREATE PROCEDURE sp_query_online_info
AS
SELECT *FROM T_OnLine_info
GO
运行存储过程:
EXEC sp_query_online_info
带參数的存储过程:
CREATE PROCEDURE insert_OnLine @cardno varchar(10), @ondate varchar(10),@ontime varchar(10),@AdminName varchar(10)
AS INSERT INTO T_OnLine_info (cardNo,onDate,onTime,adminName)
VALUES (@cardno,@ondate,@ontime,@AdminName )
GO
调用此存储过程:
exec insert_OnLine '00001' ,'8/21/2014' ,'22:22:22', '刘颖
日结账单涉及多张表的查询,所以这里用存储过程再合适只是了
在这里说一下,机房收费系统的日结账单的逻辑。假设机房管理正规的话,会有一个固定的时间点,操作员(当天工作过的)来找管理员结账,将手里的钱交给管理员,并将操作员结账信息记录在数据库中,记录中包括当天此操作员经手的充值金额和退还金额,将全部操作员经手的充值金额和退还金额汇总后,就是今天日结账单中的充值金额和退还金额。日结账单中的消费金额从T_line_info
表中获取,本期剩余金额应该从T_students_info中获取,昨日卡中剩余金额应该日结账单的前一天的sumMoney列。所以日结账单的刷新也是要在有新的操作员结过账的情况下。日结账单中一天应该仅存有一条记录,管理员每天下班之前,必须验证日结账单里的账目与自己手里的账目一致才干下班。假设不一致,就说明有操作员还未结账,管理员就不能下班。
可见日结账单是涉及多张表的,在这里用存储过程在合适只是了
CREATE PROCEDURE create_DStatement
AS DECLARE @SDate VARCHAR(10) ---结账日期,也就是今天
DECLARE @DATE AS VARCHAR(10) ----离今天近期的日期
DECLARE @remainMoney numeric(18,0) ---昨日剩余金额
DECLARE @RechargeMoney numeric(18,0) ---今日充值金额
DECLARE @consumeMoney numeric(18,0) ---今日消费金额
DECLARE @cancelMoney numeric(18,0) ---今日退卡金额
DECLARE @sumMoney numeric(18,0) ---总金额 SET @SDate =CONVERT(VARCHAR(10),GETDATE(),20) --给@SDate赋值 DELETE FROM T_DStatement_info WHERE SDate=@SDate ----删除日结账单中今天的记录 SET @DATE =(SELECT MAX(CONVERT(VARCHAR(10),SDATE) )FROM T_DStatement_info )----获取距离今天近期的一天日结记录 SELECT @remainMoney =(SELECT sumMoney FROM T_DStatement_info WHERE SDate=@DATE )
IF @remainMoney is NULL
SET @remainMoney =0 SELECT @RechargeMoney =(SELECT SUM(CONVERT(numeric(18, 0),rechargeMoney)) FROM T_Statement_info WHERE SDate=@SDate )
IF @RechargeMoney Is nuLL
SET @RechargeMoney =0 SELECT @consumeMoney =(SELECT SUM(CONVERT(numeric(18, 0),consume)) FROM T_Line_info WHERE offDate =@SDate )
IF @consumeMoney is NULL
SET @consumeMoney =0 SELECT @cancelMoney =(SELECT SUM(CONVERT(numeric(18, 0),cancelMoney))FROM T_Statement_info WHERE SDate =@SDate )
IF @cancelMoney is NULL
SET @cancelMoney =0 SELECT @sumMoney =(SELECT SUM(CONVERT(numeric(18, 0),cash)) FROM T_Students_info )
IF @sumMoney is NULL
SET @sumMoney=0 INSERT INTO T_DStatement_info (remainMoney,rechargeMoney,consumeMoney,cancelMoney ,sumMoney,SDate ) VALUES(@remainMoney,@RechargeMoney,@consumeMoney,@cancelMoney,@sumMoney,@SDate )
那么存储过程怎样在VB.net中调用呢?非常easy
运用存储过程,使我的日结账单的生成,比第一次机房的时候。相对简单了非常多。
SQL Server 为代码减负之存储过程的更多相关文章
- ASP.NET代码调用SQL Server带DateTime类型参数的存储过程抛出异常问题
ASP.NET代码调用SQL Server带DateTime类型参数的存储过程,如果DateTime类型参数的值是'0001/1/1 0:00:00'时,就会抛出异常“Message: SqlDate ...
- SQL Server CLR 使用 C# 自定义存储过程和触发器
资源来源:https://www.cnblogs.com/Brambling/p/8016060.html SQL Server CLR 使用 C# 自定义存储过程和触发器 这一篇博客接着上一篇博 ...
- 怎样修改SQL Server 2005/2008的系统存储过程(转)
我们知道,SQL Server 2005/2008的系统存储过程在正常情况下是无法直接修改的. 尽管本文是介绍怎样修改它的,但在这里,我还是建议大家尽量不要去修改它.(好像有点绕哈...) OK,闲话 ...
- [转]Sql server 大数据量分页存储过程效率测试附代码
本文转自:http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下 ...
- SQL Server 的通用分页显示存储过程
建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...
- sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。
用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...
- SQL Server 的通用分页显示存储过程(转载)
http://database.51cto.com/art/200512/12923.htm 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是: ...
- SQL server数据库系统部分常用的存储过程及说明
--SQL server数据库系统常用的存储过程 exec sp_databases --能看到所有具有权限的数据库名,大小和备注 exec sp_helpdb --数据库名,大小,管理员,创建时间状 ...
- CVE-2020-0618 SQL Server远程代码执行
1.简介 SQL Server Reporting Services(SSRS)提供了一组本地工具和服务,用于创建,部署和管理移动报告和分页报告. SSRS Web应用程序中的功能允许低特权用户帐户通 ...
随机推荐
- 转载-让PIP源使用国内镜像,提升下载速度和安装成功率
让PIP源使用国内镜像,提升下载速度和安装成功率. 对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替 ...
- 在shell脚本中使用代理
设置所有的代理走socks5 export ALL_PROXY="socks5://127.0.0.1:1080" 取消代理 unset ALL_PROXY
- [学习笔记]BS架构与CS架构
整理自:http://www.iteye.com/problems/102411 前两天面试的时候被问到这个问题,没有回答上来因此在这里学习整理一下. B/S架构 B/S架构的全称为Browser/S ...
- 如何配置MySQL?(三)
要进行mysql配置,首先要找到mysql的配置向导文件,这个配置向导文件就在我们安装目录下的一个bin的子目录下. 刚才我们是选择典型安装MySQL,一般windows是默认存储在C:\Progra ...
- Windows 绝赞应用(该网站收集了日常好用的工具和软件)
在我们的电脑使用过程中,或多或少的被流氓软件恶心过.流氓软件之所以这么流氓全是靠他那恐怖的用户数量,基本上形成垄断后,各种流氓行为就一点点体现出来了. 我们也可以选择不用,但对流氓软件来说多你一个不多 ...
- 未能加载文件或程序集“MICROSOFT.REPORTVIEWER.WEBFORMS …
此类问题说明没有安装 REPORT .请下载 ReportViewer.msi 安装包. 和sqlsysclrtypes.msi 两个都是对应版本的安装包. 这样再次启动就不会报错了.
- 【SRM 717 DIV2 C】DerangementsDiv2
Problem Statement You are given two ints: n and m. Let D be the number of permutations of the set {1 ...
- Android4.42-Settings源代码分析之蓝牙模块Bluetooth(上)
继上一篇Android系统源代码剖析(一)---Settings 接着来介绍一下设置中某个模块的源代码.本文依然是基于Android4.42源代码进行分析,分析一下蓝牙模块的实现.建议大致看一下关于S ...
- Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)
题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...
- 利用opencv源代码和vs编程序训练分类器haartraining.cpp
如需转载请注明本博网址:http://blog.csdn.net/ding977921830/article/details/47733363. 一 训练框架 训练人脸检測分类器须要三个步骤: (1 ...