码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈存储过程

时间:2014-11-15 23:18:34      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   使用   sp   数据   

前言 

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

        当调用好几个表的时候,只要将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 UserID=@UserID
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 CardNo=@CardNo ,Cash=@Cash
	@oCash=@Cash-@Cash
	Insert Into(UserID,CardNo,Cash,DateTime)Values(@UserID,@CardNo,@Cash,@DateTime)
	update T_Student set oCash=@oCash Where CardNo=@CardNo
END


存储过程确实可以帮助我们减少很多的麻烦,有很多好处,但是要理解它还要多多实践。
代码有问题,希望各位大神们,帮帮我。



浅谈存储过程

标签:style   blog   io   color   ar   os   使用   sp   数据   

原文地址:http://blog.csdn.net/mayfla/article/details/41150171

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!