上机实训11 SQL Server 2008之规则、存储过程和触发器

更新时间:2024-05-27 14:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

上机实训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

本文来源:https://www.bwwdw.com/article/67g7.html

Top