上机实训07存储过程和触发器
学号______________姓名____________
任务描述
启动SQL server 2008,附加数据库xscjglDB,执行相应的操作。 任务描述
对数据库xscjglDB中的表设置相关的规则。
设计过程
1. 创建成绩的规则(0分-100分)
CREATE RULE cj_rule AS @cj BETWEEN 0 and 100
2.将cj_rule规则绑定到成绩信息表的成绩字段上:
EXECsp_bindrule'cj_rule','成绩信息表.成绩'
3.创建性别的规则,并绑定到学生信息表的性别列上。
Createrule xb_rule As @xb='男' or @xb='女' Go
Exec sp_bindrule 'xb_rule','学生信息表.性别'
4.将cj_rule规则删除
第一步:要解除绑定到成绩信息表的成绩列上的规则,可以使用下面SQL语句: EXEC sp_unbindrule'成绩信息表.成绩'
第二步:解除规则的绑定后,就可以使用DROP RULE语句删除,其语法格式如下: DROP RULE cj_rule
任务描述
对数据库xscjglDB中创建的使用存储过程。
设计过程
1. 简单的存储过程proxs_list,用于显示学生信息:
USE xscjgldb go
CREATEPROCEDURE proxs_list AS
SELECT 学号,姓名,性别FROM 学生信息表 go
exec proxs_list
成果展示(裁图):
2.下面的SQL语句创建一个存储过程xspjcj,当输入学生姓名时,显示学生的各科的平均成绩。
USE xscjglDB go
create proc xspjcj
@xmchar(10) as
select AVG(成绩) from 学生信息表,成绩信息表
where 学生信息表.学号=成绩信息表.学号 and 学生信息表.姓名=@xm go
exec xspjcj‘郭俊’
成果展示(裁图):
3.下面的SQL语句创建了一个用于向班级信息表中插入记录的存储过程
USE xscjglDB GO
CREATE PROC pro_Addbj (@bjh nvarchar(255), @bjm nvarchar(255), @zy nvarchar(255), @yj float,
@tea varchar(255)) AS
INSERT INTO 班级信息表
VALUES(@bjh,@bjm,@zy,@yj,@tea) GO
EXEC pro_Addbj 'bj1501','计算机班1501班','计算机网络',2015,'tc002' Go
Select * from 班级信息表
成果展示(裁图):
任务描述
对数据库xscjglDB中创建的使用触发器。
设计过程
1.下面创建的tri_Checkcj触发器可用来检查插入的成绩是否在0~100之间:
USE xscjglDB GO
CREATE TRIGGER tri_Checkcj ON 成绩信息表 FOR INSERT AS
DECLARE @cj int
SELECT @cj=成绩 FROM inserted --临时表取数 IF @cj<0 OR @cj>100 BEGIN
ROLLBACK --取消原来操作
RAISERROR('成绩必须在0~100之间!',16,1) --提示错误 END GO
如果此时插入一笔记录:
INSERT成绩信息表VALUES(‘2005010101’, ‘kc1101’, 120,1) 错误展示(裁图):
2.创建的delete触发器,实现删除学生信息时,自动删除成绩信息。
CREATETRIGGERtri_Delete ON学生信息表FORDELETE AS
DELETE成绩信息表WHERE成绩信息表.学号='deleted.学号' GO
------------------------------------------------
执行以下命令:
Delete from 学生信息表 where 学号=’ st1111010101’ 成果展示(裁图):
3.创建触发器,在成绩信息表中插入记录时,如果学号不存在,拒绝插入操作。
CREATETRIGGERtri_cjadd ON成绩信息表FORinsert AS
declare@xhnchar(30) select@xh=学号frominserted
If (selectCOUNT(*)from学生信息表where学生信息表.学号=@xh)<1
Begin
Rollbacktransaction
Raiserror('学号不存在,请重新输入!',16,10) end
------------------------------------------------
执行以下命令:
insert成绩信息表values('asdfas','asdfsadf',78,'1')
错误展示(裁图):
3.删除触发器。
Drop TRIGGERtri_Delete