触发器语法错误问题【很简单的】

tcww88 2004-06-11 11:01:55
很基本的问题啦,请各位看看

在‘学生成绩’表中插入成绩时,根据视图‘学生所学课程及学分统计’中的一门课的学分数,相应的更新‘学生’表中的总学分
create trigger grade_count
on 学生成绩
for insert
as
declare @学号 char, @总学分 int

@学号 = inserted.学号 //获得插入成绩时的学号
@总学分=
select sum(学分) 总学分 //得到该学生的总学分数
from 学生所学课程及学分统计
where 学生所学课程及学分统计.学号=@学号

update 学生 //更新总学分
set 已修总学分=@总学分
where 学生.学号ww=@学号

///////////////////////////////////////////////////////////////////
//插入一条到‘学生成绩’表中
insert 学生成绩ww(学号ww,学期ww,课程名称ww,成绩ww,任课老师ww,专业ww)
values('200124450202','2','2','67','3','6')
go

///////////////////////////错误显示//////////////////////////////
服务器: 消息 170,级别 15,状态 1,过程 grade_count,行 10
第 10 行: '@学号' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,过程 grade_count,行 17
必须声明变量 '@总学分'。

(所影响的行数为 1 行)
...全文
194 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vileboy 2004-06-12
  • 打赏
  • 举报
回复
学习中
铁歌 2004-06-12
  • 打赏
  • 举报
回复
up
maxbookey 2004-06-11
  • 打赏
  • 举报
回复
学习ING
zjcxc 元老 2004-06-11
  • 打赏
  • 举报
回复
--如果要考虑同时插入表中的有多条记录,应该这样写:

create trigger grade_count
on 学生成绩
for insert
as
update 学生 set 已修总学分=b.总学分
from 学生 a join(
select 学号,总学分=sum(学分)
from 学生所学课程及学分统计 a
where exists(
select * from inserted
where 学号=a.学号)
group by 学号
)b on a.学号=b.学号
azsoft 2004-06-11
  • 打赏
  • 举报
回复
@学号前加"set"或"select"
zjcxc 元老 2004-06-11
  • 打赏
  • 举报
回复
楼主是写java的? 怎么照搬写法叱? 从表中取数要用select
zjcxc 元老 2004-06-11
  • 打赏
  • 举报
回复
create trigger grade_count
on 学生成绩
for insert
as
declare @学号 char, @总学分 int

select @学号=学号 from inserted --//获得插入成绩时的学号
select @总学分=sum(学分) -- //得到该学生的总学分数
from 学生所学课程及学分统计
where 学号=@学号

update 学生 -- //更新总学分
set 已修总学分=@总学分
where 学生.学号ww=@学号

--///////////////////////////////////////////////////////////////////
--//插入一条到‘学生成绩’表中
insert 学生成绩ww(学号ww,学期ww,课程名称ww,成绩ww,任课老师ww,专业ww)
values('200124450202','2','2','67','3','6')
go

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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