存储过程与视图

存储过程与视图存储过程与视图

大家好,又见面了,我是你们的朋友全栈君。

    还记得自考时数据库系统原理中的存储过程、视图吗?那时候我们已经掌握了创建存储过程和视图的基本语句,这在机房重构的过程中扮演了不可缺少的角色。

存储过程

一.存储过程的好处

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集。——百度百科

    小编理解的存储过程:有时我们的一个功能需要对多张表执行操作,比如下机时,首先要把下机信息更新到下机表中,还需要更新卡表中的余额,如果一张表一张表的更新,就需要写两条SQL语句,执行两次调用过程,然而代码大部分都是相同的,所以存储过程就派上了用场,把要执行的多条SQL语句同时写到一个存储过程中,执行一次调用过程就OK啦。

    存储过程的使用,首先使我们的程序代码更简洁,其次还体现了“高内聚低耦合“的思想。

二.在SQL Server中创建存储过程

1.找到自己创建的数据库—–>可编程性—–>存储过程

2.右击存储过程点“新建存储过程”

3.新建存储过程的SQL语句

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层中调用存储过程

    '更新下机信息
    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语句

    '查询学生和卡的相关信息
    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.net/105760.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 爬虫系列,(3),达盖尔图片抓取

    爬虫系列,(3),达盖尔图片抓取importreimportrequestsfrombs4importBeautifulSoup#第一步得到代理defproxy():withopen(r’ip_proxies\有效ip.txt’,’r’,encoding=’utf-8′)asf:r=f.readlines()foripinr:…

    2022年6月24日
  • Python 爬虫和数据分析实战

    Python 爬虫和数据分析实战课程介绍本课程是Python爬虫和数据分析项目实战课程,主要分3部分:第1部分是Python爬虫,主要使用Urllib3和BeautifulSoup抓取天猫商城和京东商城胸罩销售数据,并保存到SQLite数据库中;第2部分是对抓取的胸罩销售数据进行数据清洗,主要是去除空数据,让数据格式更规范;第3半部分利用Pandas对数据进行分析,以及使用M…

    2022年5月29日
  • java微信自动回复机器人开发(java微信开发学习笔记3)「建议收藏」

    java微信自动回复机器人开发(java微信开发学习笔记3)「建议收藏」微信自动回复机器人原理很简单,获取用户发送到后台的数据,然后调用机器人的api进行回复即可。我使用的茉莉机器人,官网地址如下:http://www.itpk.cn/茉莉机器人的api:http://www.itpk.cn/robot.php接口比较简单,看看就会,我直接上源代码下面代码同样基于之前的微博,需要的可以去看一下:http://blog.csdn.net/zxxz520

    2022年9月27日
  • createfont函数_windows程序设计基于.net平台

    createfont函数_windows程序设计基于.net平台CFont * f; f = new CFont; f->CreateFont(10, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_BOLD, // nWeight FALSE, // bItalic …

    2022年8月18日
  • tcp/ip协议包含哪几层_ip协议提供的是一种什么服务

    tcp/ip协议包含哪几层_ip协议提供的是一种什么服务在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。1)ARP分层的位置是TCP/IP的网络层2)ARP报文是由以太网帧进行封装传输的。没有封装进IP包。3)实际上

    2022年8月5日
  • 感知机原理小结

    感知机原理小结  感知机由Rosenblatt于1957年提出,是神经网络和支持向量机的基础。这里先简单介绍一下什么是感知机。本篇博客为《统计学方法》第二章和博客《感知机原理小结》的总结。感知机模型  感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,分别取+1+1+1和−1−1-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。这还是很…

    2022年10月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号