
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)