CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

触发器能实现吗???

楼主iamxia()2002-09-09 21:44:06 在 MS-SQL Server / 基础类 提问

TABLE   A(ID   INT,   TOTALNUM   INT)  
  TABLE   B(ID   INT,   NAME   CHAR(10),   NUM   INT)  
   
  TABLE   A   的内容  
  1,   0  
  2,   0  
  3,   0  
  4,   0  
   
  现在的要求是如何写触发器,使得当TABLE   B更新或新增时候,能够将B中NUM累加到TABLE   A的相应记录中,用ID关联。  
  TABLE   B单个记录的更新或新增很容易,问题是当有多个记录的时候怎么做?  
  注:每次改动TABLE   B中的记录的ID都是相同的  
  问题点数:100、回复次数:4Top

1 楼Yang_(扬帆破浪)回复于 2002-09-09 21:54:32 得分 100

能:  
   
  create   trigger   tr_b_All  
  on   b  
  for   insert,update,delete  
  as  
   
  declare   @A   TABLE   ID   INT,   TOTALNUM   INT)  
  declare   @ASum   TABLE   ID   INT,   TOTALNUM   INT)  
   
  insert   @a  
  select   id,NUM  
  from   inserted  
  union   all  
  select   id,-NUM  
  from   deleted  
   
  insert   @aSum  
  select   id,sum(TOTALNUM)  
  from   @a  
  group   by   id  
   
  update   a  
  set   TOTALNUM=a.TOTALNUM+t.TOTALNUM  
  from   a,@ASum   t  
  where   a.id=t.id  
   
  insert   a(id,TOTALNUM)  
  select   id,TOTALNUM  
  from   @ASum   t  
  where   not   exists   (  
  select   1   from   a    
  where   a.id=t.id  
  )  
  go  
  Top

2 楼Yang_(扬帆破浪)回复于 2002-09-09 21:55:16 得分 0

每次改动TABLE   B中的记录的ID相同和不相同都是可以的。  
   
  Top

3 楼iamxia()回复于 2002-09-10 02:03:19 得分 0

?  
   
  我在UPDATE中不能用TABLE变量?提示必须先声明。奇怪中...Top

4 楼Yang_(扬帆破浪)回复于 2002-09-10 08:28:37 得分 0

写少了扩号!  
   
  create   trigger   tr_b_All  
  on   b  
  for   insert,update,delete  
  as  
   
  declare   @A   TABLE   (ID   INT,   TOTALNUM   INT)  
  declare   @ASum   TABLE   (ID   INT,   TOTALNUM   INT)  
   
  insert   @a  
  select   id,NUM  
  from   inserted  
  union   all  
  select   id,-NUM  
  from   deleted  
   
  insert   @aSum  
  select   id,sum(TOTALNUM)  
  from   @a  
  group   by   id  
   
  update   a  
  set   TOTALNUM=a.TOTALNUM+t.TOTALNUM  
  from   a,@ASum   t  
  where   a.id=t.id  
   
  insert   a(id,TOTALNUM)  
  select   id,TOTALNUM  
  from   @ASum   t  
  where   not   exists   (  
  select   1   from   a    
  where   a.id=t.id  
  )  
  go  
   
  Top

相关问题

  • 触发器中如何实现
  • 急,触发器里怎么实现?
  • 关于在vc中用ado实现触发器的问题
  • 怎样利用触发器实现数据库主键自增?
  • PB可以实现触发器的效果吗?
  • 触发器实现两个数据库同步??
  • 请问这个需求用触发器能否实现
  • 怎样实现这样的触发器?在线==============================================================
  • 请问触发器能实现这样的功能嘛……
  • Oracle的触发器怎样实现通过时间触发?

关键词

  • totalnum
  • asum twhere
  • numfrom
  • totalnumfrom
  • 记录
  • 相同
  • table
  • insert
  • update
  • select

得分解答快速导航

  • 帖主:iamxia
  • Yang_

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo