SQL实验:触发器

SQL实验:触发器,第1张

-------1、

CREATE TRIGGER tr_insert

ON 学生表

FOR INSERT

AS

DECLARE @Class_ID int,

@Stu_id int

select top 1 @Class_ID=课号 from (select 课号,count(*) as total from 选课表 group by 课号) t1 order by t1.total desc

select @Stu_id=学号 from inserted

insert into 选课表 values(@Stu_id, @Class_ID, 0)

GO

--------2、

CREATE TRIGGER tr_delete

ON 学生表

FOR DELETE

AS

DECLARE @Stu_id int

select @Stu_id=学号 from deleted

if exists (select 1 from 选课表 where 学号=@Stu_id)

begin

RAISERROR ('拒绝删除学号为%d的记录,因该生有选课记录',@Stu_id)

ROLLBACK TRANSACTION

end

/*要求在删除学生信息同时,将相关表中的信息全部删除(因不知道你的表,你自己添加根据@Stu_id(学号)来在下面添加额外对应表的删除吧*/

GO

1. 利用课本上介绍的几种方法对数据库的完整性进行定义和检验,掌握Constraint,Check等短句的用法;

2. 在SQL Server或者MySQL中练习触发器的使用;

a) 在northwind数据库中建立2个表,cust和order,表定义如下:

表cust

列名 类型及长度 其它

CustomerID char(5) 主键

Custcity Char(24)

Custname Char(64) 非空

CStatus int 客户状态

Cstorage int 库存量

Cdate Date 日期

表order:

列名 类型及长度 其它

Orderid char(5) 主键

OrderNames Char(24) 非空

OStatus int 状态

Orders int 定购量

Odate Date 日期

b) 要求根据以上表完成以下作业:

① 在cust表中建立删除触发器,实现上述2表的级联删除。

② 在order表建立insert触发器,当向order表插入一行,如果cust表中对应记录status值为1,说明处于准备状态不能写入该数据;

③ 在order表上建立一个插入触发器,在添加一个订单时,减少cust表的相应货物的记录的库存量。

④ 在order表上建立一个插入触发器,规定订单日期(Odate)不能手工修改。

⑤ 要求订购的物品一定要在仓库中有的,并且数量足够。

⑥ 在order表上建立一个插入触发器,同时插入多行数据时,要求订购的物品一定要在仓库中有的。

⑦ 查看触发器情况:

1. sp_helptrigger 触发器名

2. sp_helptext 触发器名

3. 设置某一触发器的无效和重新有效

4. 删除触发器 YES


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9654185.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存