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 [email protected] ----删除日结账单中今天的记录

SET @DATE =(SELECT MAX(CONVERT(VARCHAR(10),SDATE) )FROM T_DStatement_info )----获取距离今天近期的一天日结记录

SELECT @remainMoney =(SELECT sumMoney  FROM T_DStatement_info WHERE [email protected] )
IF @remainMoney  is NULL
SET @remainMoney =0

SELECT @RechargeMoney =(SELECT SUM(CONVERT(numeric(18, 0),rechargeMoney)) FROM T_Statement_info WHERE [email protected] )
IF @RechargeMoney  Is nuLL
SET @RechargeMoney =0

SELECT @consumeMoney =(SELECT SUM(CONVERT(numeric(18, 0),consume)) FROM T_Line_info WHERE offDate [email protected] )
IF @consumeMoney is NULL
SET @consumeMoney =0

SELECT @cancelMoney =(SELECT SUM(CONVERT(numeric(18, 0),cancelMoney))FROM T_Statement_info WHERE SDate [email protected] )
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

运用存储过程,使我的日结账单的生成,比第一次机房的时候。相对简单了非常多。

时间: 2024-11-04 21:01:50

SQL Server 为代码减负之存储过程的相关文章

SQL Server -为代码减负之触发器

触发器是一张表的增删改操作,引起或触发对另一张表的增删改操作,所以触发器便有3种类型,分别是deleted触发器,Update触发器,insert触发器 触发器又根据替换原来的增删改操作,还是在原来的增删改完成之后进行增删改操作,分为Instead of触发器和For或者After触发器(for和after属于一种触发器) 触发器的使用涉及到两张非常重要的表用来保存已经改变或者已经在第一章被操作的表上不存在的记录,分别是虚拟表Inserted和虚拟表Deleted 虚拟表Inserted 虚拟表

SQL Server中带事务的存储过程简单举例

先来看一个概念: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行.那么在存储过程里添加事务,则可以保证该事务里的所有sql代码要么完全执行要么完全不执行. 举个简单的带事务的存储过程: Begin Set NOCOUNT ON; --不返回影响行数 Set XACT_ABORT ON; --使用存储过程执行事务需要开启XACT_ABORT参数(默认为OFF) delete from table1 where n

SQL SERVER: 给用户增加执行存储过程的权限

USE DatabaseName GO CREATE ROLE UserName GO GRANT EXECUTE TO UserName GOSQL SERVER: 给用户增加执行存储过程的权限

SQL Server 的通用分页显示存储过程

建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待

sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。

用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" 无法在当前安全上下文下访问数据库 "dbname". 想着是架构方面的问题,换sa还是不行.查到微软的一篇文章 提示需要开数据库的 ALTER DATABASE current_db SET TRUSTWORTHY ON 我把跨的那个库设置了还是不行.最后自己写测试代码,代码如下: cre

SQL Server CLR 使用 C# 自定义存储过程和触发器

这一篇博客接着上一篇博客继续介绍 SQL CLR Stored Procedure 和 CLR Trigger, 上一篇博客介绍了 SQL CLR Function 的使用,以及 CLR 程序集的注册和 CLR Function 的注册. 我的上一篇博客:SQL Server CLR 使用 C# 自定义函数 四.CLR Stored Procedure 接下来在之前的项目选择添加新项,选择 SQL CLR C# 存储过程. public partial class StoredProcedure

SQL server while循环使用,存储过程 11月24日

今天首先学习了SQL server中循环语句while的使用 之后学习了case  when 的使用,when需要跟then  配合使用 2.SQL server中存储过程的使用情况及举例 存储过程练习: 1.输入一个数,求1~n的和

sql server、db2、oracle 存储过程动态sql语句示例

Oracle CREATE OR REPLACE PROCEDURE a_test AS t_sql VARCHAR2(2000); t_a VARCHAR2(20); t_b VARCHAR2(20); t_c VARCHAR2(20); t_d VARCHAR2(20); BEGIN t_c := 'f'; t_d := 'g'; --这里可为insert 等任何sql语句. t_sql := 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC O

C#操作access和SQL server数据库代码实例

在C#的学习中,操作数据库是比较常用的技术,而access和sql server 数据库的操作却有着不同.那么,有哪些不同呢? 首先,需要引用不同的类.因为有着不同的数据引擎. access:using System.Data.OleDb; sql server:using System.Data.SqlClient; 下面是我写的access和sql 数据库操作的两个类: 1 //1.操作sql数据库的类 2 public class DBOperSQL1 3 { 4 public stati