江南大学物联网工程学院数据库课程实验二作业2实验报告

一、开发环境

DBMS: Microsoft SQL Server 2019 (64- bit)
可视化管理工具: Microsoft SQL Server
Management Studio- 18.10

二、代码、注释及测试

第三题

--创建客户表并且添加数据
create table customers(
cnum varchar(5) primary key, --将客户编号设置为主键,使其具有完整性
cname varchar(5) not null, --非空约束(下同)
lname varchar(5) not null,
cadres varchar(30) not null,
cpos_code varchar(10) not null,
lphone varchar(12) not null
);
insert into customers
--values('0001','叶民','Yeman','桃园公寓','214000','17851313918')
--values('0002','Lily','Lily','gym','214026','15251883908')
values('0003','Tom','Tom','KFC','214142','15253343
900');
--创建存储过程
create proc get_cus_info (@cpos varchar(6)) --有一个 in 输入的局部变量
as
begin
--可以直接获取满足条件的结果,concat 单
行函数为拼接字符串功能,like 模糊查询
select * from customers where cpos_code like 
(concat('%',@cpos))
end
--执行存储过程
--将'124'作为 in 参数输入,即获取邮编尾号是'142'的客户信息
exec get_cus_info '142'

第四题

--创建学生表并添加测试数据
create table s(
snum varchar(4) primary key, --设置学号为主键,使其具有完整性
sname varchar(5) not null, --非空约束
age int,
dept varchar(15)
);
insert into s
--values('001','张三',22,'物联网工程学院');
--values('002','王四',21,'计算机学院');
--values('003','李五',19,'生命工程学院');
values('004','赵六',19,'医学院');
--创建课程表并添加测试数据
create table c(
cnum varchar(4) primary key, --设置课程号为主键,使其具有完整性
cname varchar(10) not null, --非空约束(下同)
teacher varchar(5) not null
);
insert into c
--values('C1','Java','杨均')
--values('C2','数据库','马振')
--values('C3','计算方法','江楠')
values('C4','数据结构','陈帆')
--创建选课表并添加测试数据
create table sc(
snum varchar(4),
cnum varchar(4),
score int,
foreign key (snum) references s(snum), --设置外键约束,该表中的 snum 需要在 s 表中存在
foreign key (cnum) references c(cnum), --设置外键约束,该表中的 cnum 需要在 c 表中存在
unique (snum,cnum) --设置(snum,cnum)组合唯一,即该表中不能存在 snum 和 cnum 都相同的数据
);
insert into sc
--values('001','C1',98)
--values('002','C1',89)
--values('003','C1',93)
--values('001','C2',92)
--values('002','C2',98)
--values('003','C2',96)
--values('004','C3',96)
--创建触发器
create trigger check_legalsc
on sc --基于 sc 选课表
after insert --在添加后触发
as
declare @curc_count varchar(4) 
--获取添加的课程编号
select @curc_count = cnum from inserted 
declare @curs_snum varchar(4)
--获取添加的学生学号
select @curs_snum = snum from inserted 
--检查学号是否存在 s 表
if @curs_snum in (select snum from s) 
begin
--检查课程编号是否存在 c 课程表且未被选满(这里设置满为 2)
if 2 >= (select COUNT(*) from sc where 
cnum = @curc_count) and @curc_count in (select 
cnum from c)
begin
select '恭喜你,选课成功!' as '结果'
end
else
begin
--回滚﹐避免加入
rollback transaction 
select '对不起,该课程人数已满!' as '结果'
end
end
else 
begin
rollback transaction --回滚﹐避免加入
select '你好,你没有选改课的权限!' 
as '结果'
end
--测试触发器
--①成功情况
insert into sc(snum,cnum)
values('001','C3')
--②失败情况 1:课程已满
insert into sc(snum,cnum)
values('004','C1')
--③失败情况 2:学生学号不在 s 表中
insert into sc(snum,cnum)
values('005','C4')

三、小结

①存储过程可以一次编译多次使用。存储过程只在创建时进行编译,之后的使用都不需要重新编译,这就提升了 SQL 的执行效率。
②可以减少开发工作量。将代码封装成模块,实际上是编程的核心思想之一,这样可以把复杂的问题拆解成不同的模块,然后模块之间可以重复使用,在减少开发工作量的同时,还能保证代码的结构清晰。
③存储过程的安全性强。我们在设定存储过程的时候可以设置对用户的使用权限,这样就和视图一样具有较强的安全性。
④可以减少网络传输量。因为代码封装到存储过程中,每次使用只需要调用存储过程即可,这样就减少了网络传输量。
⑤良好的封装性。在进行相对复杂的数据库操作时,原本需要使用一条一条的 SQL 语句,可能要连接多次数据库才能完成的操作,现在变成了一次存储过程,只需要连接一次即可。
⑥可移植性差。存储过程不能跨数据库移植,比如在 MySQL、Oracle 和 SQL Server 里编写的存储过程,在换成其他数据库时都需要重新编写。
⑦调试困难。只有少数 DBMS 支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容易。
⑧存储过程的版本管理很困难。比如数据表索引发生变化了,可能会导致存储过程失效。我们在开发软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

关注公号【逆向通信猿】更精彩!!! 目录 仿真结果卷积码原理图删余后性能比较常用的删余码仿真代码根据码率生成打孔参数(子函数)将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函数)对接收到的序列进行反打孔,将原来打孔删除的比特进行补零(子函数)BPSK调制下(2,1,6…

使用JDK 11在Java字符串上的新方法

Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布。 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() “使用专用的分隔符从源字符串中懒惰地提供行的字符串实例方法。” JDK-8200378 String :: strip&#x…

江南大学物联网工程学院数据库课程实验三作业3vb.net实验报告

一、开发环境 语言环境:Microsoft.NET Framework 4.6 SDK IDE:Microsoft Visual Studio Community 2015 二、代码及配置 1、Form1 Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate …

[2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

欢迎同步关注公众号【逆向通信猿】 CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供…

江南大学物联网工程学院数据库课程实验四作业4vb.net实验报告

一、开发环境 语言环境:Microsoft.NET Framework 4.6 SDK IDE:Microsoft Visual Studio Community 2015 二、代码 Imports System.Data.SqlClient Public Class Form1 连接本机数据库并获取test_one数据库中的sc表数据 Dim mybind As BindingManagerB…

fftw库在windows下的的编译和配置

目录运行环境FFTW库的下载FFTW库的生成VS2017添加fftw库步骤运行环境 Visual Studio 2017 企业版 FFTW库的下载 首先在官网上下载fftw-3.3.5-dll32或fftw-3.3.5-dll64压缩包,解压。本人已经编译生成好的库下载地址:https://download.csdn.net/downloa…

深度学习在机器视觉应用领域的最新研究综述(物联网技术应用大作业)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料) 摘要:机器视觉是人工智能正在快速发展的一个分支。简单说来&#xff0c…

MATLAB库函数hilbert(希尔伯特变换)的C语言实现(FFT采用FFTW库)

目录希尔伯特变换原理公式MATLAB官方帮助文档中希尔伯特变换算法常量和结构体定义C语言实现(FFTW库的float版,double版类似)希尔伯特变换原理公式 MATLAB官方帮助文档中希尔伯特变换算法 hilbert uses a four-step algorithm: Calculate the FFT of the input sequ…

netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理

netbeans7.4有许多例子说明Java异常处理可能比首次出现时要困难得多,Josh Bloch专门将一整章的《 Effective Java》 (两个版本)专门用于异常处理。 Java中的检查异常模型 仍然 “ 有争议” 。 我很高兴看到我最近下载的NetBeans 7.4 beta有一…

在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)

原文链接:https://www.paddlepaddle.org.cn/support/news?actiondetail&id2104 “我们的质检要做的是在厚度仅十几微米的电池隔膜上找出所有微小缺陷,如果没有检测出来,就很可能使新能源汽车的电池在使用过程中出现问题,甚至…

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of 2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a …

准确率超90%、1秒发出报警,人工智能助国网山东实现无人巡检(人工智能应用案例)

原文链接:https://mp.weixin.qq.com/s/Jh2YLY-4um79ucdHIs5NTg 众所周知,深度学习框架是人工智能的基础技术“底座”,在各大传统产业上也有着巨大的潜力尚待挖掘。5月20日,由深度学习技术及应用国家工程实验室与百度联合主办的“…

混合多云每个人都应避免的3个陷阱(第2部分)

如果您已经完全控制了内部数据中心,但又不能停止利用和支付过多的资源,那么如何期望防止这些成本转嫁到您的云策略中呢? 每天都在肆意宣传云,但每个人都应避免三个陷阱。 从云,混合云到混合多云,您被告知这…

MATLAB库函数upfirdn(分数倍采样率变换)的C语言实现【姊妹篇1基于std::vector】

upfirdn原理 yout = upfirdn(xin,h,p,q) upfirdn的功能在MATLAB官方帮助文档中说得很清楚 通过插零实现 p p p倍上采样对上采样之后的信号用给定的 h h h(通常为低通滤波器)进行滤波对滤波结果进行

基于PaddlePaddle实现高尔夫球场的遥感检测(人工智能应用案例)

原文链接:https://www.paddlepaddle.org.cn/support/news?actiondetail&id2103 1 . 背景及意义 随着高尔夫球运动在我国的兴起,关于高尔夫球场大量占用土地资源、污染环境、耗水量大且公益性差的争议越来越多。国家从2004年开始制定一系列相关政策…

在Jersey测试中模拟SecurityContext

泽西极有可能编写与泽西一起编写的REST-API集成测试。 只需扩展类JerseyTest并继续就可以了。 我遇到一个问题,我不得不模拟SecurityContext ,以便SecurityContext包含一个特殊的UserPrincipal 。 挑战在于Jersey在测试中将SecurityContext包装在自己的…

第一类修正贝塞尔函数的C语言实现

第一类修正贝塞尔函数公式 Iν(z)(z2)ν∑(k0)∞(z24)kk!Γ(νk1)I_{\nu}(z)\left(\frac{z}{2}\right)^{\nu} \sum_{(k0)}^{\infty} \frac{\left(\frac{z^{2}}{4}\right)^{k}}{k ! \Gamma(\nuk1)}Iν​(z)(2z​)ν(k0)∑∞​k!Γ(νk1)(4z2​)k​ 其中,Γ(a)\Gamma…

MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现

firls函数功能 FILS设计了一种线性相位FIR滤波器,它可以最小化理想分段线性函数与滤波器在一组期望频带上的幅值响应之间的加权积分平方误差。 b = firls(n,f,a) b = firls(n,f,a,w) b = firls(n,f,a,ftype) b = firls(n,f,a,w,ftype)f是在0和1之间的范围内指定的频率点对的…

数电实验一-初识Multisim和Basys3

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一、实验目的 详见报告 二、实验仪器设备 详见报告 三、实验设计过程 使用Multisim为Basys3板卡创建一个PLD设计并进行验证。 1.创建P…

自动化学科前沿讲座作业 基于深度学习的工厂人员监测系统设计

1 背景及应用场景 在工业复杂生产环境下,作业人员的安全问题至关重要。大多数工业企业采用人眼观察视频的方式对作业人员位置进行判断,这种方式长时间会使管理者出现疲劳问题,效率非常低下,遇到安全问题也不能进行及时的处理。采用…