使用数据库语句 有学生表和班级信息表,创建触发器,如果有学生转系,则相应系人数也一并修改。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用数据库语句 有学生表和班级信息表,创建触发器,如果有学生转系,则相应系人数也一并修改。相关的知识,希望对你有一定的参考价值。
如果是软件开发,尽量少用触发器,数据库表越简单越好,后期维护容易没有限制;如果是学习研究,那你得把学生表,班级信息表,学院相关系表里的相关字段及说明贴出来才能知道怎么把本来可以做在代码里的东西换成触发器实现追问create table student
(Sno int primary key,
Sname varchar(20) not null,
Ssex char(4),
sBirthDate datetime,
sDepNo int foreign key references Department(sDepNo)
)
create table Department
(
sDepNo int primary key,
sDepName varchar(20) not null
sDtotal int
)
可以了吗
可以,具体语句我不太确定,思路是在student表上建立一个触发器,要不要存储过程就要看情况了,select所有sDepNo,count(*)的信息,group by sDepNo,然后update on Department set new.sDtotal=那个count(*)算出的值;语法可能是错的,但是意思就是这样的。确实有点复杂的,利用存储过程的话就相当于写代码差不多的样子了,可以把select,update的语句单独作成几个存储过程来使用的。祝你能调试出正确代码,或者也有高人可以用其他数据库方面的方法做出来的
参考技术A 你想问什么sql中触发器当修改学生班级信息时自动修改相应班级的学生人数
怎么实现被修改的班级人数-1,修改后的班级人数+1呢?
create or replace trigger test_triggerafter update on 学生表
for each row
begin
update 班级表 set 班级表.人数=班级表.人数-1 where 班级表.班级= :old.班级;
update 班级表 set 班级表.人数=班级表.人数+1 where 班级表.班级= :new.班级;
commit;
end; 参考技术A if (object_id('tri','tr')is not null )
drop trigger tri
go
create trigger tri
ON dbo.学生表
FOR UPDATE
as
IF UPDATE(班级id)
declare @班级1 int
declare @班级2 int
SELECT @班级1=班级id
from inserted
SELECT @班级2=班级id
FROM deleted
update 班级表 set 人数=人数+1 where 班级= @班级1
update 班级表 set 人数=人数-1 where 班级= @班级2
GO
以上是关于使用数据库语句 有学生表和班级信息表,创建触发器,如果有学生转系,则相应系人数也一并修改。的主要内容,如果未能解决你的问题,请参考以下文章