CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

求一触发器

楼主winstar66()2004-12-03 22:11:34 在 MS-SQL Server / 基础类 提问

--一记录bom树的表,主要字段,父层编码,子层编层  
  --求一触发器,在删除中间任一层时,连同该层所有的子层一起删除!  
  --如下测试数据,在执行delete   aa   where   p_id   =   'c001'时,将最后面的三条记录一起删除!  
   
  create   table   aa(p_id   varchar(10),   c_id   varchar(10))  
  insert   aa  
  select   'a001','b001'  
  union  
  select   'b001','c001'  
  union  
  select   'c001','d001'  
  union  
  select   'c001','f001'  
  union  
  select   'f001','g001' 问题点数:50、回复次数:3Top

1 楼mschen(Co-ok)回复于 2004-12-03 23:34:23 得分 0

--这个可以吗?  
   
  create   trigger   tri_aa  
  on   aa   from   delete  
  as  
  delete   *   from   aa  
  where   p_id   in   (select   c_id   from   deleted)Top

2 楼mschen(Co-ok)回复于 2004-12-03 23:36:17 得分 20

--改正一下  
   
  create   trigger   tri_aa  
  on   aa   for   delete  
  as  
  delete     from   aa  
  where   p_id   in   (select   c_id   from   deleted)  
   
  --测试成功  
   
  /*p_id               c_id                
  ----------   ----------    
  a001               b001  
  b001               c001  
   
  (所影响的行数为   2   行)  
  */  
  Top

3 楼zjcxc(邹建)回复于 2004-12-04 11:47:47 得分 30

--测试数据  
  create   table   aa(p_id   varchar(10),   c_id   varchar(10))  
  insert   aa   select   'a001','b001'  
  union   all   select   'b001','c001'  
  union   all   select   'c001','d001'  
  union   all   select   'c001','f001'  
  union   all   select   'f001','g001'  
  go  
   
  --处理的触发器  
  create   trigger   tr_delete   on   aa  
  for   delete  
  as  
  if   @@rowcount=0   return  
   
  declare   @l   int  
  set   @l=0  
  select   a.c_id,level=@l   into   #t  
  from   aa   a,deleted   d  
  where   a.p_id=d.c_id  
  while   @@rowcount>0  
  begin  
  set   @l=@l+1  
  insert   #t   select   a.c_id,level=@l  
  from   aa   a,#t   d  
  where   a.p_id=d.c_id   and   d.level=@l-1  
  end  
  delete   a   from   aa   a,#t   b   where   a.c_id=b.c_id  
  go  
   
  --删除  
  delete   from   aa   where   p_id='b001'  
   
  --显示删除结果  
  select   *   from   aa  
  go  
   
  --删除测试  
  drop   table   aa  
   
  /*--测试结果  
   
  p_id               c_id                
  ----------   ----------    
  a001               b001  
   
  (所影响的行数为   1   行)  
  --*/Top

相关问题

  • 触发器一问
  • ??一个触发器
  • 求一触发器
  • 求一触发器
  • 求一触发器
  • 一个触发器问题
  • 求一插入触发器!!!
  • 一个触发器问题
  • 一个触发器问题
  • 求一个DELETE触发器!

关键词

  • 触发器
  • unionselect
  • aa
  • 删除
  • union
  • trigger
  • deleted
  • varchar
  • create
  • select

得分解答快速导航

  • 帖主:winstar66
  • mschen
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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