CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

触发器生成!

楼主yeshucheng(叶澍成★七哥)2005-06-02 15:24:28 在 MS-SQL Server / 应用实例 提问

现有两张表:a(id,.....)  
                          b(id,pk,flag)  
  对一张数据表:a进行触发  
  如果对表a进行添加,删除,修改记录,马上触发表b,在表b中只要把表a中的关键字放入pk中,相应的做出判断标志(例如是修改就把flag置成‘1’)  
  希望得到大家解决!! 问题点数:100、回复次数:22Top

1 楼zjcxc(邹建)回复于 2005-06-02 15:34:48 得分 100

create   triger   tr_process   on   a  
  for   insert,update,delete  
  as  
  if   exists(select   *   from   inserted)  
        if   exists(select   *   from   deleted)  
              update   b   set   flag=1   from   b,inserted   i   where   b.pk=i.id   --更新  
        else  
              insert   b(pk,flag)   select   id,0   from   inserted                       --新增  
  else  
      delete   b   from   b,inserted   i   where   b.pk=i.id                                 --删除  
  Top

2 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 16:15:04 得分 0

上面的语句好象有点问题Top

3 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 16:48:00 得分 0

可能我问题还没有说清楚:  
  a(x,y....)x是关键字段  
  b(pk,flag)  
  现在要把x的变动写到b中的pk里,然后相应的写入标志Top

4 楼zjcxc(邹建)回复于 2005-06-02 20:48:14 得分 0

x是关键字段,x都变了,怎么和b表的值对应?  
   
  举数据说明问题.Top

5 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 21:23:26 得分 0

举个例子:  
  a表:                                                                                 b表:  
          GBI_ID               name                   stock                           pk                   flag  
                               
          43245               dfsdf                   甲级别                  
          54454               asdfdf                 乙级别------>  
          22334               ffffff                 丙级别  
  其中:GBI_ID是关键字     b表中的pk是要把GBI_ID中的字段通过新增,修改,删除放到里面。  
  同时对表a操作的同时要置flag标志位:0新增,1修改,2删除  
   
  现在的问题是,你写的方法(特别是修改)会对b表生成产生多条记录!!!  
  不知道我描述的清楚!!  
  Top

6 楼zjcxc(邹建)回复于 2005-06-02 21:27:47 得分 0

还是不清楚,你给的数据中,b表是空表,看不出你要想怎么处理。  
   
  你可以这样举例子  
  1、假设两个表都是空表,现在在a表插入三条记录,那么b表做何处理?  
  2、对a表的数据随便修改两条(注意是一次性修改),那么b表做何处理?  
  3、再举删除的要求。  
  Top

7 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 21:36:34 得分 0

呵呵,可能我说的不好:)B表前面还有个id是流水号,我这里没有写出来  
  1。假设两个表都是空表,现在在a表插入三条记录,那么b表对三条记录的关键字放到b表的pk中(依次),然后再置flag为0  
  2。对a表的数据随便修改两条(注意是一次性修改),那么b表也要把相应修改的关键字写到pk中,然后置flag为1  
  3。删除同理。。。  
   
  Top

8 楼zjcxc(邹建)回复于 2005-06-02 21:41:42 得分 0

修改a表的GBI_ID怎么办?Top

9 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 22:00:29 得分 0

修改a表的GBI_ID同时要放到b表的PK中Top

10 楼zjcxc(邹建)回复于 2005-06-02 22:10:20 得分 0

同时是什么意思?   举个例子。Top

11 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 22:18:03 得分 0

哈哈:)  
  Top

12 楼yeshucheng(叶澍成★七哥)回复于 2005-06-02 22:24:20 得分 0

我晚上有点糊涂了:)  
  create   trigger   tr_updprocess   on   BM_Goodsbasicinfo  
  for   update,insert,delete  
  as  
  if   update(mingcheng)  
              insert   into   chufaqi   select   GBI_ID,'1'   from   inserted    
  go  
  以上的是修改Top

13 楼yeshucheng(叶澍成★七哥)回复于 2005-06-03 08:29:30 得分 0

如果这样写:  
  create   trigger   tr_updprocess   on   BM_Goodsbasicinfo  
  for   insert  
  as  
              if   update(mingcheng)  
              insert   into   chufaqi   select   GBI_ID,'0'   from   inserted    
   
  会造成:如果修改了相关的mingcheng字段,那么触发器就能起作用。但是如果我修改的字段没有mingcheng这一项,那么出发器就不能起作用。  
  现在的问题是,只要我对表中的相关字段修改了,触发器就能起作用该怎么做?Top

14 楼zjcxc(邹建)回复于 2005-06-03 08:30:40 得分 0

--就是按你自己写的嘛  
   
  create   trigger   tr_updprocess   on   BM_Goodsbasicinfo  
  for   update     ---修改是update  
  as  
              if   update(mingcheng)  
              insert   into   chufaqi   select   GBI_ID,'0'   from   insertedTop

15 楼yeshucheng(叶澍成★七哥)回复于 2005-06-03 08:45:18 得分 0

但是,上面只能对修改了mingcheng   字段起修改的记录啊?  
  BM_Goodsbasicinfo(mingcheng,address,zip)  
                                            |  
                                      单独修改它才起触发作用  
  如果单独修改address或者是单独修改ZIP,触发就不能起作用Top

16 楼yeshucheng(叶澍成★七哥)回复于 2005-06-03 09:23:18 得分 0

现在根据你的方法,新增删除都成功,但是修改还有问题:  
  由于问题是我对表BM_Goodsbasicinfo修改一条记录的同时都要在表chufaqi中新增一条记录并且置上标志位Top

17 楼zjcxc(邹建)回复于 2005-06-03 09:29:20 得分 0

create   trigger   tr_updprocess   on   BM_Goodsbasicinfo  
  for   update     ---修改是update  
  as  
              if   update(mingcheng)   or   update(address)   or   update(zip)     --用or可以指定要触发的多个列  
              insert   into   chufaqi   select   GBI_ID,'0'   from   inserted  
  Top

18 楼yeshucheng(叶澍成★七哥)回复于 2005-06-03 09:40:36 得分 0

你的QQ多少?好象很难描述我的这个问题:)  
  我的号是;56076621,你加我好了Top

19 楼yeshucheng(叶澍成★七哥)回复于 2005-06-03 09:53:01 得分 0

能否把新增,修改,删除写在一起?  
  我试了,好象按照这样写会有问题:修改不能进行  
  create   trigger   tr_process   on   BM_Goodsbasicinfo  
  for   update,insert,delete  
  as  
  if   exists(select   *   from   inserted)  
        if   update(mingcheng)  
              insert   into   chufaqi   select   GBI_ID,'1'   from   inserted    
        else  
              insert   into   chufaqi   select   GBI_ID,'0'   from   inserted  
  else  
          insert   into   chufaqi   select   GBI_ID,'2'   from   deleted  
  还望指正!!!  
   
  Top

20 楼zjcxc(邹建)回复于 2005-06-03 09:54:25 得分 0

create   trigger   tr_process   on   BM_Goodsbasicinfo  
  for   update,insert,delete  
  as  
  if   exists(select   *   from   inserted)  
        if   exists(select   *   from   deleted)   and(update(mingcheng)   or   update(address)   or   update(zip))     --修改  
              insert   into   chufaqi   select   GBI_ID,'1'   from   inserted    
        else     --新增  
              insert   into   chufaqi   select   GBI_ID,'0'   from   inserted  
  else     --删除  
          insert   into   chufaqi   select   GBI_ID,'2'   from   deleted  
  Top

21 楼wu_zhijun(wuzhijun)回复于 2005-06-03 10:23:30 得分 0

这样就写死了呀!如果要写成动态的话要怎么写呢?Top

22 楼zjcxc(邹建)回复于 2005-06-03 10:51:19 得分 0

怎么动态法?Top

相关问题

  • 触发器生成新表的问题
  • 一个自动生成触发器问题:请指教!
  • 在线等:java程序可以生成触发器吗?
  • 怎么在生成物化视图时没有触发器?
  • 触发器-当天的日期生成一个ID号
  • 怎么看到已经生成的存储过程和生成的触发器?
  • 为动态表生成一个动态触发器时遇到的问题
  • 触发器?!
  • 触发器
  • 触发器

关键词

  • 修改
  • 字段
  • 数据
  • mingcheng
  • goodsbasicinfofor
  • 触发器
  • 表
  • 删除
  • pk
  • deleteasif

得分解答快速导航

  • 帖主:yeshucheng
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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