触发器删除同一表中的级联数据,用以上语句删除。怎么只能删除当前数据和他下一级的。
delete   from   shopclass   where   parentid   in   (select   id   from   deleted)   
 parentid保存他父级的id   
------解决方案--------------------给你个例子 
 当前数据库中有“uMateriel”和“uRecord”两张表,他们分别用来保存物品信息和物品的出入库记录信息,结构如下 
 引用: 
 uMateriel 
 ---------------- 
 mId   int 
 mName  nvarchar(40) 
 mNum   int DEFAULT 0   
 uRecord 
 ---------------- 
 rId   int 
 mId   int 
 rNum   int 
 rDate  datetime DEFAULT GetDate() 
 rMode  bit DEFAULT 0   
 好了,数据表已经有了,现在看一下实际的应用。 
 现在,我们要购入物品A,数量100,时间为当天,已知物品A的编号为1,那么通常我们需要做以下两个步骤: 
 引用: 
 1、在 uRecord 记录表中增加一条物品A的购入记录: 
   INSERT INTO uRecord (mId, rNum, rMode) VALUES (1, 100, 0) 
 2、更新 uMateriel 物品库存表中物品A的数量: 
   UPDATE uMateriel SET mNum = mNum + 100 WHERE mId=1    
 现在根据上面的语法我们建立一个触发器(注意一点,触发器是附于一张表或视图的,所以只能在表里建立或在查询分析器里建立),这个触发器的功能就是自动更新库存数量   
 -------------------------------------------- 
 引用: 
 CREATE TRIGGER [trUpdateMaterielNum] ON [dbo].[uRecord]  
 -- 表明在插入记录之后执行这个触发器 
 AFTER INSERT 
 AS 
 -- 当前更新的编号 
 DECLARE @intID                int 
 -- 当前更新的数量 
 DECLARE @intNum        int 
 -- 当前模式 
 DECLARE @intMode        int 
 -- 判断是否有记录录被更新,@@ROWCOUNT是系统函数,返回受上一语句影响的行数。 
 IF @@ROWCOUNT > 0 
 BEGIN 
         -- 取得当前插入的物品编号和数量,Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。 
         SELECT @intID=mId,@intNum=rNum,@intMode=rMode FROM Inserted   
         -- 判断当前模式(0为入库,1为出库)来更新当前物品的数量 
         IF @intMode = 0 
                 UPDATE uMateriel SET mNum = mNum + @intNum WHERE mId=@intID 
         ELSE 
                 UPDATE uMateriel SET mNum = mNum - @intNum WHERE mId=@intID 
 END
------解决方案--------------------要看你的表是否选择了递归触发器的属性,不然是不能递归触发的,当然不能删除下下级了