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应用程序中的功能允许低特权用户帐户通 ...
随机推荐
- Auto-Publishing and Monitoring APIs With Spring Boot--转
原文地址:https://dzone.com/articles/auto-publishing-amp-monitoring-apis-with-spring-bo If you are headin ...
- 由浅入深讲解数据库中Synonym的使用方法
1.Synonym的概念 Synonym(同义词)是SQL Server 2005的新特性.推出已经有几年的时间了.我们可以简单的理解Synonym为其他表的别名.本文中使用Northwind数据库为 ...
- exsi主机之间使用scp拷贝文件超时问题
exsi主机之间使用scp拷贝文件直接连接不上报错超时: 解决: 防火墙勾选ssh选项
- [POI2011]MET-Meteors 整体二分_树状数组_卡常
线段树肯定会 TLE 的,必须要用树状数组. Code: // luogu-judger-enable-o2 #include <cstdio> #include <algorith ...
- GenIcam标准介绍
GenICam TM的目标是为各种相机和设备提供通用编程接口.无论他们使用什么接口技术(GigE Vision,USB3 Vision,CoaXPress,Camera Link HS,Camera ...
- 【BZOJ 1045】 [HAOI2008] 糖果传递
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 思路来自hzwer.. 设xi表示第i个人往左传递了xi个糖果. (如果小于0表示旁边的人给他了糖果. 则ans=∑|xi| 最后所 ...
- Spring Cloud学习笔记【六】Hystrix 监控数据聚合 Turbine
上一篇我们介绍了使用 Hystrix Dashboard 来展示 Hystrix 用于熔断的各项度量指标.通过 Hystrix Dashboard,我们可以方便的查看服务实例的综合情况,比如:服务调用 ...
- Struts(21)OGNL具体解释
Struts2 中内置了OGNL表达式的支持,使得Struts2的具有比Struts1更为强大的数据訪问的功能.本文主要解说OGNL的用法.并不会去解说一些原理性的东西.想要了解的朋友能够自己去查阅相 ...
- linux设备驱动归纳总结(三):4.ioctl的实现
linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简单介绍: 尽管在文件操作结构体"struct file_operations"中有非常多相应的设备操作函数 ...
- ATL中宏定义offsetofclass的分析
近日学习ATL,通过对宏定义offsetofclass的解惑过程.顺便分析下虚函数表,以及通过虚函数表调用函数的问题. 1 解开ATL中宏定义offsetofclass的疑惑 #define _ATL ...