SQL SERVER2000 触发器语句

roader2046 2008-10-27 06:36:20
请教一条触发器语句怎么写:
表A(xuehao,examtime,examband,score),其中(xuehao,examtime,examband)为主键
表B(xuehao,name,age,passband),其中xuehao为主键
现在要求是在表A中插入数据,当A中的examband=0且score>425的时候更新表B中的passband为0,当A中的examband=1且score>425的时候更新表B中的passband为1,其他不变化
请各位帮忙,谢谢~
...全文
111 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小瑞 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 roader2046 的回复:]
引用 6 楼 Leedsema 的回复:
其中(xuehao,examtime,examband)为主键;


不知道,你是来自第几世界的.一个表有三个主键,PK么?怎么建立的?

额,我火星了?(xuehao,examtime,examband)这样不可以吗?主键只能是一个字段?没看见我用括号吗?联合主键可以吗?
[/Quote]


呵呵,都可以吧
roader2046 2008-10-28
  • 打赏
  • 举报
回复
问题解决了,用3楼的方法,将exists改成in然后用xuehao判断下就可以,谢谢大家!
roader2046 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Leedsema 的回复:]
其中(xuehao,examtime,examband)为主键;


不知道,你是来自第几世界的.一个表有三个主键,PK么?怎么建立的?
[/Quote]
额,我火星了?(xuehao,examtime,examband)这样不可以吗?主键只能是一个字段?没看见我用括号吗?联合主键可以吗?
zperson 2008-10-28
  • 打赏
  • 举报
回复
create trigger tri on A for insert
as
begin
update B
set passband=i.examband
from inserted i
where B.xuehao=i.xuehao and i.score>425
end
「已注销」 2008-10-28
  • 打赏
  • 举报
回复
其中(xuehao,examtime,examband)为主键;


不知道,你是来自第几世界的.一个表有三个主键,PK么?怎么建立的?
等不到来世 2008-10-27
  • 打赏
  • 举报
回复
create trigger tri on A for insert
as
begin
update B
set passband=i.examband
from inserted i
where B.xuehao=i.xuehao and i.score>425
end
go
roader2046 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 josy 的回复:]
引用楼主 roader2046 的帖子:
当A中的examband=0且score>425的时候更新表B中的passband为0,当A中的examband=1且score>425的时候更新表B中的passband为1,其他不变化
请各位帮忙,谢谢~

是指新插入的那条记录吗?

SQL code--在表A中插入数据,当A中的examband=0且score>425的时候更新表B中的passband为0,当A中的examband=1且score>425的时候更新表B中的passband为1--当上面2个条件都不满足的时候将B表的passband更新为-…
[/Quote]
感谢您的回复,我试了下,很不错,不过有个问题,当在A表插入一条新数据的时候(假设这条数据的结果是把passband=1)把B表的所有数据的passband列都更新成了1,我想应该要跟插入A的这条数据的xuehao字段联系起来,能请您再看下吗?
百年树人 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 roader2046 的帖子:]
当A中的examband=0且score>425的时候更新表B中的passband为0,当A中的examband=1且score>425的时候更新表B中的passband为1,其他不变化
请各位帮忙,谢谢~
[/Quote]
是指新插入的那条记录吗?

--在表A中插入数据,当A中的examband=0且score>425的时候更新表B中的passband为0,当A中的examband=1且score>425的时候更新表B中的passband为1
--当上面2个条件都不满足的时候将B表的passband更新为-1

IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'trA' AND type = 'TR')
DROP TRIGGER trA;
GO
Create Trigger trA
On A
for Insert
As
begin
update B set passband=0 where exists(select * from Inserted where examband=0 and score>425);
update B set passband=1 where exists(select * from Inserted where examband=1 and score>425);
update B set passband=-1 where not exists(select * from Inserted where examband in(0,1) and score>425);
end
roader2046 2008-10-27
  • 打赏
  • 举报
回复
额,再补充下触发器那个功能,当上面2个条件都不满足的时候将B表的passband更新为-1,谢谢了!~
roader2046 2008-10-27
  • 打赏
  • 举报
回复
忘了个问题,为什么我的mssql在连上网之后查询就比较快,而不上网的时候就感觉比较慢,我是单机调试用,没有几条数据

27,579

社区成员

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

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