浅谈存储过程

前言

之前看了很多博客有用存储过程的,但是看不怎么懂,就没有用。在遇到组合查询的时候,相较于之前,逻辑还算是复杂些,于是想用用存储过程。

当调用好几个表的时候,只要将sql语句写入存储过程,那么复杂的过程就很简单了。

注意:因为目前为止直接出国sql sever ,所以以sql sever为例

一、概念

看看sql sever联机丛书是怎么说的:

1、存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。

  2、可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。

  3、也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。

二、创建存储过程

一开始想把存储过程写在VS中,但是怎么写也写不对。最后还是决定写到sql sever中吧。

首先要先了解一些存储过程的基本知识:语法、调用方法等。

<pre name="code" class="sql">

CREATE PROC 存储过程名称
    [参数列表(多个以“,”分隔)]
AS
SQL 语句

意思是告诉sql sever要建立一个存储过程,后面是存储过程名称;

下面写参数;如果哪个参数后面跟着OUTPUT,就说明这个参数是为了输出的。

AS下面就是存储过程的内容了。

只要将代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个存储过程。你可以打开“企业管理器”,选择当前操作的数据库,此时就可以在列表中看到你刚刚创建的存储过程了(我不会告诉别人如果没有,刷新一下即可O(∩_∩)O哈哈~)。

举个例子:

<pre name="code" class="vb">CREATE PROC StudentInfoQuery
@CardNo varchar(10)
@UserID varchar(10)
@StudentName varchar(10)
AS
BEGIN
Select * From T_Student Where [email protected]
End

三、调用存储过程

3.1初级

既然创建了,就要调用一下(因为你还没有到全智能的时候呢,(*^__^*) 嘻嘻……)。用一下上面的例子。存储过程名称是 StudentInfoQuery,查询学生信息。

public Function Query_StuInfo(StudentInfo as Entity.StudentEntity)as list (of  Entity.StudentEntity) Impelments IDAL.StudnetIDAL.Query_StuInfo
	Dim Sqlhelper as new SqlHelper
	Dim Cmdtext as string="StudentInfoQuery"
	Dim Paras as SqlParamer()={New sqlParamer("CardNo",StudentInfo.CardNO)}
	Dim dt as Datatable
	Dim mylist as new list(of Entity.StudnetEntity)
	dt=Sqlhelper.ExecSelect(Cmdtext,Command.Text,paras)
	mylist=GetGenerics.CoverToList((of  Entity.StudentEntity)(dt)
	Return mylist
end Function

以上进行一些简单的创建、调用存储过程了。

3.2进阶

咱们以后会用到各种复杂多变的存储过程,现在就不要想都懂了,但是一步步深化还是要有的。我还不怎么懂,希望各位大神们,有空帮帮我。

比如机房收费系统里的退卡,咱们来分析一下,退卡需要知道会操作哪些表:Student和ReturnCard两个表。

然后分析一下会有哪些业务逻辑:A、根据卡号查询Student表内的余额 B、将计算后的余额更新到Student表中 C、将退卡信息插入到ReturnCard表中。这样基本上就完成了退卡的操作。

来看看退卡的存储过程该怎么写吧。

CREATE PROCEDURE ReturnCard
@StudentNo varchar(50)
@CardNo varchar(50)
@Cash varchar(10) output
@userID varchar(50)
@DateTime varchar(50)
AS
DECLARE @OCash varchar(50)
Begin

	select * From T_Student where [email protected] ,[email protected]
	@[email protected]@Cash
	Insert Into(UserID,CardNo,Cash,DateTime)Values(@UserID,@CardNo,@Cash,@DateTime)
	update T_Student set [email protected] Where [email protected]
END

存储过程确实可以帮助我们减少很多的麻烦,有很多好处,但是要理解它还要多多实践。

代码有问题,希望各位大神们,帮帮我。

时间: 2024-11-10 06:26:58

浅谈存储过程的相关文章

浅谈数据库之存储过程

浅谈数据库之存储过程 什么是存储过程 如果你接触过其他的编程语言,那么就好理解了,存储过程就像是方法一样. 竟然他是方法那么他就有类似的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名有存储过程参数也有返回值. 存储过程的优点:    存储过程的能力大大增强了SQL语言的功能和灵活性. 可保证数据的安全性和完整性. 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全. 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性. 在运行存储过程前,

浅谈三层架构(2)

感受: 对于三层的学习,自己刚开始的感觉真的是一头雾水啊,当时真的出现了很烦躁的感觉,我想这种感觉的出现真的是很可怕的,就这样耽误了两天,在网上也搜寻者自己想要的资料,昨天四姐也好心给调试了一番,顿时把自己的大脑打通了,其实问题难不难,就在于能不能打开思路了! VB.NET的三层实现: 上篇文章主要是对于三层有了一个表面的理解,下面针对机房收费登陆界面来进行一下简单的理解: UI层主要就是表面的构建,多以需要使用windows窗体来完成,而其他BLL和DAL则不需要,之间建立一个类库则可以完成自

浅谈SQL注入风险 - 一个Login拿下Server

前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都能登录了.不能这么写!” “呦?小伙子这都知道了?那你说说看 啥是注入?注入只能拿来绕过登录么?” 好吧,竟然在老子面前装逼,看来不给你点儿颜色看看,你还真是不明白天有多高.. 于是乎..哈哈.大清早的,轻松在班里装了一手好逼.. 呵呵.不说了,下面我把那个项目重写一下发上来吧.演示一下注入有哪些危

浅谈SQL注入风险 - 一个Login拿下Server(转)

前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都能登录了.不能这么写!” “呦?小伙子这都知道了?那你说说看 啥是注入?注入只能拿来绕过登录么?” 好吧,竟然在老子面前装逼,看来不给你点儿颜色看看,你还真是不明白天有多高.. 于是乎..哈哈.大清早的,轻松在班里装了一手好逼.. 呵呵.不说了,下面我把那个项目重写一下发上来吧.演示一下注入有哪些危

并发浅谈-锁和Token的应用

并发 即在同一时刻内有多个完成同一任务的进程或线程在同时运行.并发一般发生在大流量集中访问如抢购或秒杀等业务场景中,它所带来的影响主要表现在以下两个方面:1:造成系统的负载压力过大.比如说mysql天生在处理大并发时表现的异常吃力,并发大时经常可以造成数据库挂掉.2:造成业务资源的竞争出现.比如说兑换一个激活码,并发下可能会出现两个人同时兑换到的同一个激活码. 从开发的经验来看,一般开发者在写程序逻辑时,绝大多数的情况下是没有考虑并发问题的:这其中有两个方面,一是与业务有关,二是与经验有关:其中

浅谈数据库设计

浅谈数据库设计 数据库设计的重要性:好的数据库设计有下面的一些作用: 1.首先充分体现系统的需求,数据库是为应用服务的,好的数据库设计应该首先能满足应用系统的业务需求,准确的表达数据间关系. 2.保证数据的准确性和一致性,通过主外键.非空.限制.唯一索引等保证数据的健壮. 3.提高数据的查询效率,通过合理表结构,安排物理存储分区.增加索引等方式,提高数据的读取速度,提高查询效率. 4.有好的扩展性,在必要时能根据需求扩展数据结构. 在系统设计中对数据库的设计应考虑哪些设计原则  数据库是整个软件

浅谈SQL Server数据库分页

数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多方法了.之前在面试中遇到过这一问题,问如何高效实现数据库分页.刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下. 一 需求 这里以SQLServer的示例数据库NorthWind为例,里面有一张Product表,现在假设我们的需求是要以UnitPrice降序排列,并且分页,每一页10条

?浅谈Asp.net的sessionState

浅谈Asp.net的sessionState Three Session State providers : InProcSessionStateStore, which stores session state in memory in the ASP.NET worker process OutOfProcSessionStateStore, which stores session state in memory in an external state server process Sq

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点.当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要.但是,一旦SQL SERVER发生崩