先祝各位CSDN的朋友,元宵快乐!元宵快乐!有个关于SQL SERVER触发器的问题。先看下面三个“表”
考试记录表
[test]
cName 姓名nvarchar
sClass 班级nvarchar
nPoints 成绩int
sType 类型nvarchar考试标准表
[Rules]
sClass 班级nvarchar
nPoints 达标成绩int达标学生表
[Good]
cName 姓名nvarchar
sType 类型nvarchar
问题是这样,当插入一个“考试表test”,用触发器来判断当前记录的分数,是否达到标准[Rules]中对应字段“班级sClass”的达标成绩。
如果超过,则在“达标表[Good]”添加一条同名sName记录,sType字段内容为“合格”。
如果大于及格线两倍,则添加同名sName记录,sType字段内容为“优秀”。
同时修改[test]表中sType的内容。触发用得不多,这次要用到一些判断和条件不太明白。如果能对代码进行一些说明就最好了!我用“可用分”谢谢大家!
考试记录表
[test]
cName 姓名nvarchar
sClass 班级nvarchar
nPoints 成绩int
sType 类型nvarchar考试标准表
[Rules]
sClass 班级nvarchar
nPoints 达标成绩int达标学生表
[Good]
cName 姓名nvarchar
sType 类型nvarchar
问题是这样,当插入一个“考试表test”,用触发器来判断当前记录的分数,是否达到标准[Rules]中对应字段“班级sClass”的达标成绩。
如果超过,则在“达标表[Good]”添加一条同名sName记录,sType字段内容为“合格”。
如果大于及格线两倍,则添加同名sName记录,sType字段内容为“优秀”。
同时修改[test]表中sType的内容。触发用得不多,这次要用到一些判断和条件不太明白。如果能对代码进行一些说明就最好了!我用“可用分”谢谢大家!
on test
for insert
as
begin
insert into good
select cName ,case when t.npiont between r.npoints and 2*r.npoints then '合格'
when t.npiont >= 2*r.npoints then '优秀'
from rules r,inserted t where t.sclass=r.sclass
end test
--大概这样
--问题是这样,当插入一个“考试表test”,用触发器来判断当前记录的分数,是否达到标准[Rules]中对应字段“班级sClass”的达标成绩。
--如果超过,则在“达标表[Good]”添加一条同名sName记录,sType字段内容为“合格”。
--如果大于及格线两倍,则添加同名sName记录,sType字段内容为“优秀”。
create trigger tr on test
for insert
as
begin
insert into good
select i.cName,sType=(case when i.npoints>r.npoints*2 then '优秀' else '合格' end)
from inserted i ,rules r
where i.sclass=r.sclass and i.npoints>=r.npoints
end
go--同时修改[test]表中sType的内容最好不要写在触发器里吧
在'优秀'后面少了个 end