前言
之前看了很多博客有用存储过程的,但是看不怎么懂,就没有用。在遇到组合查询的时候,相较于之前,逻辑还算是复杂些,于是想用用存储过程。
当调用好几个表的时候,只要将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
代码有问题,希望各位大神们,帮帮我。