SQL SERVER中,在选课表插入一条记录时,如何用触发器在学生表中的学分字段加上相关选修课程的学分?
学生(学号,姓名,年龄,..,学分),选课(学生编号,课程编号,成绩),课程(课程编号,课程名,...,学分)大概用到的就这三个关系,我绕来绕去写不出来,求个标准答案~...
学生(学号,姓名,年龄,..,学分),选课(学生编号,课程编号,成绩),课程(课程编号,课程名,...,学分)
大概用到的就这三个关系,我绕来绕去写不出来,求个标准答案~ 展开
大概用到的就这三个关系,我绕来绕去写不出来,求个标准答案~ 展开
展开全部
看到楼主的表关系,我想,学分应该是该学生的总分吧,课程里的学分,是该课程的所有学生的总分吧,如果如以上所述,代码如下
create trigger trIns
on 选课
for insert
as
begin
update 学生 set 学分=学生.学分+inserted.成绩
where exists(select * from inserted where inserted.学生编号=学生.学号)
/*下面是课程的总成绩(可选)
update 课程 set 学分=课程.学分+inserted.成绩
where exists(select * from inserted where inserted.课程编号=课程.课程编号)
*/
end
create trigger trIns
on 选课
for insert
as
begin
update 学生 set 学分=学生.学分+inserted.成绩
where exists(select * from inserted where inserted.学生编号=学生.学号)
/*下面是课程的总成绩(可选)
update 课程 set 学分=课程.学分+inserted.成绩
where exists(select * from inserted where inserted.课程编号=课程.课程编号)
*/
end
展开全部
CREATE TRIGGER xf_tri
AFTER INSERT
ON xuanke_table --选课表中发生插入操作之后,触发 触发器操作
DECLARE
v_xuefen NUMBER;
BEGIN
SELECT xuefen
INTO v_xuefen
FROM xuanke_table
WHERE xuehao =:new.kecheng_id
AND xuehao = :new.xuehao; --取得最新添加的记录的学生号,课程号,学分
UPDATE student_table
SET xuefen=v_xuefen
WHERE xuehao=:new.xuehao
AND kecheng_id=:new.kecheng_id; --修改学生表中的学分记录
END;
我在oracle中写的,没编译,你试试能不能通过吧~大体流程是这样的
AFTER INSERT
ON xuanke_table --选课表中发生插入操作之后,触发 触发器操作
DECLARE
v_xuefen NUMBER;
BEGIN
SELECT xuefen
INTO v_xuefen
FROM xuanke_table
WHERE xuehao =:new.kecheng_id
AND xuehao = :new.xuehao; --取得最新添加的记录的学生号,课程号,学分
UPDATE student_table
SET xuefen=v_xuefen
WHERE xuehao=:new.xuehao
AND kecheng_id=:new.kecheng_id; --修改学生表中的学分记录
END;
我在oracle中写的,没编译,你试试能不能通过吧~大体流程是这样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create trigger ins_xuefen
on 学课表
for insert
as
begin
update 学生 set 学分=学分+c.学分 from 学生 a ,inserted b, 课程 c
where a.学号=b.学生编号 and b.课程编号=c.课程编号
end
on 学课表
for insert
as
begin
update 学生 set 学分=学分+c.学分 from 学生 a ,inserted b, 课程 c
where a.学号=b.学生编号 and b.课程编号=c.课程编号
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create trigger dbo.trigger1 on insert
for
declare @fen int,@xiehao int
select top 1 @xiehao = 学生编号 from inserted
select top 1 @fen = 学分 from 课程 where 课程编号 = (select 课程 from inserted)
update 学生 set 学分 = isnull(学分) +@fen where 学号 = @xiehao
for
declare @fen int,@xiehao int
select top 1 @xiehao = 学生编号 from inserted
select top 1 @fen = 学分 from 课程 where 课程编号 = (select 课程 from inserted)
update 学生 set 学分 = isnull(学分) +@fen where 学号 = @xiehao
追问
update 学生 set 学分 = isnull(学分) +@fen where 学号 = @xiehao
可以这么写的吗?直接用WHERE?不用SELECT吗?
追答
是的,update 语句支持 where 子句,定位修改的记录
这是从SQL Server 2005 联机丛书复制来的update语法:
UPDATE
[ TOP ( expression ) [ PERCENT ] ]
{ | rowset_function_limited
[ WITH ( [ ...n ] ) ]
}
SET
{ column_name = { expression | DEFAULT | NULL }
| { udt_column_name.{ { property_name = expression
| field_name = expression }
| method_name ( argument [ ,...n ] )
}
}
| column_name { .WRITE ( expression , @Offset , @Length ) }
| @variable = expression
| @variable = column = expression [ ,...n ]
} [ ,...n ]
[ ]
[ FROM{ } [ ,...n ] ]
[ WHERE {
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
]
}
}
]
[ OPTION ( [ ,...n ] ) ]
[ ; ]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-12-20
展开全部
oracle表情插入
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询