触发器问题

yingbo833 2014-09-18 01:27:56
现有两张表,一张学生表: student 字段名 姓名:name,学号:number ,课程:kc,班级号:classid,成绩:cj
另一张表 班级表:class 字段名 班级号:classid,人数:countperson
业务规则:当向学生表增加记录时,如果班级表中没有对应班级号,则学生表中班级号要等于班级表中班级号,班级表中人数要做相应变化;当向学生表增加记录时,如果班级表中有对应班级号,班级表中人数要做相应变化;
当向学生表删除记录时,如果班级表中没有对应班级号,班级表中人数不做相应变化;当向学生表删除记录时,如果班级表中有对应班级号,班级表中人数要做相应变化;
部分代码如下:
create trigger delete_student
on student for delete
as
update class
set countperson=countperson-1
from class,deleted
where deleted.classid=class.classid
go

create trigger insert_student
on student for insert
as
update class
set countperson=countperson+1
from class,inserted
where inserted.classid=class.classid
go
求完善。
...全文
264 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingbo833 2014-09-19
  • 打赏
  • 举报
回复
引用 7 楼 yingbo833 的回复:
create trigger [dbo].[insert_student] on [dbo].[student] for insert as declare @number nvarchar select @number=number from inserted if exists (select * from student where number=@number) begin raiserror('已经存在此号码',18,2) rollback tran end else begin update class set countperson=countperson+1 from class,inserted where inserted.classid=class.classid end 我这样写,红色部分好像有问题,怎么运行时输入同学号怎么没有提示
高手哪去了,怎么没有人回复。
Tiger_Zhao 2014-09-19
  • 打赏
  • 举报
回复
是搞不清楚。
如何处理raiserror出来的消息,这是你程序里的工作。
yingbo833 2014-09-19
  • 打赏
  • 举报
回复
引用 9 楼 Tiger_Zhao 的回复:
raiserror 关系到上层调用者怎么收这个消息。 可能你没有接受或没有处理这个消息。
搞不明白
Tiger_Zhao 2014-09-19
  • 打赏
  • 举报
回复
raiserror 关系到上层调用者怎么收这个消息。
可能你没有接受或没有处理这个消息。
yingbo833 2014-09-18
  • 打赏
  • 举报
回复
create trigger [dbo].[insert_student] on [dbo].[student] for insert as declare @number nvarchar select @number=number from inserted if exists (select * from student where number=@number) begin raiserror('已经存在此号码',18,2) rollback tran end else begin update class set countperson=countperson+1 from class,inserted where inserted.classid=class.classid end 我这样写,红色部分好像有问题,怎么运行时输入同学号怎么没有提示
Tiger_Zhao 2014-09-18
  • 打赏
  • 举报
回复
“如果班级表中没有对应班级号,则学生表中班级号要等于班级表中班级号”
这两句根本就是矛盾的!
难道整个系统只有一个班级号?
豫新 2014-09-18
  • 打赏
  • 举报
回复
没有关联的班级号,新增的学生,班级人数就不应该增加.两个表之间是通过班级id关联的.
yingbo833 2014-09-18
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
没有对应班级号只能回滚事务,新增不成功。 要么就得给出规则如何自动选取班级号。
"当向学生表增加记录时,如果班级表中没有对应班级号,则学生表中班级号要等于班级表中班级号,班级表中人数要做相应变化,红色标注的部分就是业务规则
Tiger_Zhao 2014-09-18
  • 打赏
  • 举报
回复
没有对应班级号只能回滚事务,新增不成功。
要么就得给出规则如何自动选取班级号。
yingbo833 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 fredrickhu 的回复:
你不都写好了吗?有关联的才更新,没关联的数量不变 就是这样写的吧
还有一部分不知道怎么写,就是"当向学生表增加记录时,如果班级表中没有对应班级号,则学生表中班级号要等于班级表中班级号,班级表中人数要做相应变化",求求高手门
--小F-- 2014-09-18
  • 打赏
  • 举报
回复
你不都写好了吗?有关联的才更新,没关联的数量不变 就是这样写的吧

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧