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,其他不变化
请各位帮忙,谢谢~
...全文
135 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在连上网之后查询就比较快,而不上网的时候就感觉比较慢,我是单机调试用,没有几条数据
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。

27,580

社区成员

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

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