sql update 语句

有两个表student和class结构如下createdatabasetriDatausetriDatacreatetableclass(班级intprimarykey,... 有两个表student 和 class 结构如下
create database triData
use triData
create table class
(
班级 int primary key,
人数 int
)
create table student
(
编号 char(3) primary key not null,
姓名 nchar(4) not null,
班级 int foreign key references class(班级)
)

insert into student values('001','王维',1)
insert into student values('002','张超',2)
insert into student values('003','赵云',2)
insert into student values('004','胡涛',1)
insert into student values('005','马旭',2)
insert into student values('006','赵新',2)

insert into class(1,2)
insert into class(2,4)

--建立触发器
create trigger update_student on student
for update
as
declare @班级 int
select @班级=班级 from inserted
update class set 人数 = 人数 + @@rowcount
where 班级=@班级

update student set 班级=1 where 姓名 like '赵%'

进行更新的时候 被更新的班级的人数增加 几个人。同时更改减少的另一个班级的人数。现在我只能增加人数,怎么减少对应班级的人数?还望高手指点。
还有inserted,deleted,这几个在触发器里面究竟代表什么,是不是没有updated这个关键字呢?
谢谢……
展开
 我来答
alex_hy
2010-07-26 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2601
采纳率:100%
帮助的人:988万
展开全部
按你这个脚本直接改:
create trigger update_student on student
for update
as
begin
declare @班级 int
select @班级=班级 from inserted
update class set 人数 = 人数 + @@rowcount
where 班级=@班级

select @班级=班级 from deleted
update class set 人数 = 人数 - @@rowcount
where 班级=@班级

end

inserted是刚刚增加的整行,deleted是刚刚删除的整行数据
没有updated,update的过程就是先delete,再insert,所以用inserted和deleted能表达update的过程了

另外你这个触发器只能对更新结果是1个班级的有效,如果是多个班级,在select @班级=班级 from inserted这句上会报错

最好的办法还是
create trigger update_student on student
for update
as
begin
update class set 人数 = 人数 + 人数_add
from (select 班级,count(1) as 人数_add from inserted group by 班级) b
where class.班级=b.班级

update class set 人数 = 人数 - 人数_min
from (select 班级,count(1) as 人数_min from deleted group by 班级) b
where class.班级=b.班级
end
曹_操曹操传
2010-07-26 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:201
采纳率:0%
帮助的人:78.9万
展开全部
拿你的例子来说,update就是当你对student表进行跟新的时候自动的触发update_student,并在后台执行。
insert表示插入时候触发,delete表示删除的时候触发
语法和update几乎是一样的,只要把关键字改了就行。
create trigger Insert_student on student
for insert
as
...语句...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式