Sql Server笔记
笔记部分
笔记一:触发器部分
我们以 INSERT 触发器的创建为例,讲解触发器的创建和使用。首先创建测试数据表:
1 | --创建学生表 |
为 student 表创建 INSERT 触发器:
1 | --创建insert触发器 |
1 | --测试触发器trig_insert-->功能是向student插入数据的同时级联插入到student_sum表中,更新stuCount |
另外,因为定义学生总数表 student_sum ,是向 student 表中插入数据后,才计算的学生总数。所以,学生总数表应该禁止用户,向其中插入数据。
1 | --创建insert_forbidden,禁止用户向student_sum表中插入数据 |
实验部分
向 score 表建立一个插入触发器。保证向 score 表中插入的学生信息的学号,必须在 student 表中存在
1 | create trigger trigger_insert_score |
1 | insert into score values('1001','2001','89.5') |
向 student 表插入删除触发器,实现 student 表和 score 表的级联删除;
1 | create trigger trigger_delete_student |
1 | delete from student where sno='1001' |
向 score 表建立触发器,使 grade 列不能手工修改
1 | create trigger trigger_protect_grade |
1 | delete from score where sno='1001' |
笔记二:存储过程部分
实现从表中查询所有学生基本信息的存储过程(存储过程名称一定要为 proc_student_info
1 | create procedure proc_student_info |
1 | exec proc_student_info |
创建一个带参数的存储过程,输出指定学号的学生信息;
1 | create procedure proc_sno |
1 | exec proc_sno '1001' |
创建一个带参数的存储过程,根据指定参数增加学生信息,如果学生编号已经存在则不能增加(调用此存储过程时,会依次填充各个字段值,请注意 insert 时,参数顺序与表字段的顺序一致);
1 | create procedure proc_add |
1 | exec proc_add '1004','HMM','female','2019-6-2','English','national school' |
创建一个带参数的存储过程,删除指定学号的学生信息。若成功,则输出 successfully deleted ;若没有该学号,则输出 No such student
1 | create procedure student_del |
1 | go |
笔记三:测试部分编码
利用超市管理数据库的商品表,编程实现:如果商品表中啤酒类平均售价低于10,则将所有啤酒的售价增加10%,直到平均售价达到10为止
1 | use supermarket |
创建一个函数fun_avgallgoodsale,求超市管理数据库中所有商品的平均售价
1 | CREATE FUNCTION fun_avgallgoodsale() |
创建一个多语句表值函数fun_avggoodsale,求超市管理数据库各类商品的平均售价
1 | USE supermarket |
创建一个存储过程proc_avgnumsale,显示指定商品类别的平均数量和平均售价
1 | USE supermarket |
通过游标cur遍历商品表的数据,并将每个商品的售价增加10%
1 | use supermarket |
笔记四:学习通习题部分
定义一个用户标量函数,用以实现指定年月,当月有多少天
1 | create function getDaysOfMonth(@year int,@month int) returns int |
用流程控制语句编写程序,求1×2×3×…×100的积。
1 | create function getDaysOfMonth(@year int,@month int) returns int |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蓝桉`Blog!
评论