大家好,又见面了,我是你们的朋友全栈君。
还记得自考时数据库系统原理中的存储过程、视图吗?那时候我们已经掌握了创建存储过程和视图的基本语句,这在机房重构的过程中扮演了不可缺少的角色。
存储过程
一.存储过程的好处
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集。——百度百科
小编理解的存储过程:有时我们的一个功能需要对多张表执行操作,比如下机时,首先要把下机信息更新到下机表中,还需要更新卡表中的余额,如果一张表一张表的更新,就需要写两条SQL语句,执行两次调用过程,然而代码大部分都是相同的,所以存储过程就派上了用场,把要执行的多条SQL语句同时写到一个存储过程中,执行一次调用过程就OK啦。
存储过程的使用,首先使我们的程序代码更简洁,其次还体现了“高内聚低耦合“的思想。
二.在SQL Server中创建存储过程
1.找到自己创建的数据库—–>可编程性—–>存储过程
2.右击存储过程点“新建存储过程”
3.新建存储过程的SQL语句
代码语言:javascript复制USE [myCharge]
GO
/****** Object: StoredProcedure [dbo].[proc_Offline] Script Date: 2015/12/27 20:31:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[proc_Offline]
@cardNo char(10),
@offDate datetime,
@consumeTime int,
@consume decimal,
@cash decimal,
@status char(10)
AS
BEGIN
update onlineLog set offDate =@offDate ,consumeTime =@consumeTime ,consume =@consume ,cash =@cash ,status =@status where cardNo=@cardNo
update card set cash =@cash where cardNo =@cardNo
END
4.在D层中调用存储过程
代码语言:javascript复制 '更新下机信息
Public Function updateOffline(Offline As offLineModel) As Boolean Implements IOnlineInfo.updateOffline
'命令的文本内容现在把SQL语句改为存储过程的名称proc_Offline
cmdText = "proc_Offline"
'给存储过程中的参数传值
paras = {New SqlParameter("offDate", Offline.OffTime),
New SqlParameter("consumeTime", Offline.ConsumeTime),
New SqlParameter("consume", Offline.Consume),
New SqlParameter("cardNo", Offline.CardNo),
New SqlParameter("cash", Offline.CardNo),
New SqlParameter("status", Offline.State)
}
'调用SQL Helper
helper.ExecuteNoQuery(cmdText, CommandType.StoredProcedure, paras)
flag = True
Return flag
End Function
关于SQL Helper如何写,参见上一篇《SQL Helper》
视图
一.视图的好处
以上下机为例,由于上机是需要显示卡的类型、余额、学生的学号、姓名等信息,而卡的信息需要从card表中查询,学生的信息需要从student表中查询,所以如果在代码中只使用简单的SQL语句,需要多次查询,有时不小心还会出现一些错误,所以把自己需要查询的内容放在一个视图中,查询起来就更加高效方便。
二.在SQL Server中创建视图
1.找到自己创建的数据库—–>视图
2.右击存储过程点“新建视图”
3.选择添加“card”表和“student”表。
4.在各个表中选择自己需要查询的字段
5.保存视图,刷新视图就可以看到自己新建的视图了。
以上是通过向导来创建视图的过程,并自动生成SQL语句。我们也可以自己通过SQL语句创建视图,不过从上面的SQL语句看来,SQL语句创建视图,很容易就会丢掉或写错其中的一个字段,当我们对SQL语句十分熟练时,可以考虑,平时用上面的方法就挺方便的。
6.在视图中查询内容的SQL语句
代码语言:javascript复制 '查询学生和卡的相关信息
Public Function StuandCard(Card As cardInfo) As DataTable Implements IOnlineInfo.StuandCard
'下面的SQL语句中,把表明替换为视图名即可
cmdText = "select * from View_InquireStuCardInfo where cardNo = '" & Card.CardNo & "'"
table = helper.ExecSelectNo(cmdText, CommandType.Text)
Return table
End Function
存储过程VS视图
相同点:都可以同时对多张表操作。
不同点:存储过程适用于多张表同时执行增(insert)删(delete)改(update)的SQL语句
视图适用于多张表同时执行查询(Select)的SQL语句
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105760.html原文链接:https://javaforall.cn