更新ParentId时,自动更新子级的ParentIds

 1 --====================================
 2 --  更新ParentId时,自动更新子级的ParentIds
 3 --====================================
 4 
 5 ALTER TRIGGER UpdateParentIds ON S_User 
 6     FOR update
 7 AS 
 8 
 9 DECLARE @id int                      --当前用户的ID
10 DECLARE @parentId int                --当前用户的ParentId
11 DECLARE @parentIds varchar(500)      --更新后的ParentIds
12 DECLARE @count int                   --当前用户的子级数量
13 SELECT @parentId =i.ParentId,@id=i.ID FROM inserted i    --记录下当前用户的ID及ParentId
14 PRINT '@parentId:'+convert(varchar,@parentId)
15 PRINT '@id:'+convert(varchar,@id)
16 SELECT @parentIds =convert(varchar,u.ID)+','+ u.ParentIds FROM S_User u where u.ID=@parentId  --根据ParentId 拼接最新的ParentIds
17 PRINT '@parentIds:'+convert(varchar,@parentIds)
18 SET  XACT_ABORT   ON
19 IF UPDATE(ParentId)
20 BEGIN
21    PRINT '更新beigin'
22    UPDATE S_User SET ParentIds = @parentIds WHERE ID=@id
23    SELECT @count=COUNT(*) FROM S_User WHERE ParentId = @id
24    IF(@count>0)
25    BEGIN
26     UPDATE S_User SET ParentId = @id WHERE id in (SELECT id FROM S_User WHERE ParentId = @id)
27    END
28    PRINT '更新end'
29 END
30 GO

自己写自己用,顺便记录下来备忘,涉及到触发器递归触发。

注:数据库-》属性-》选项-》递归触发器已启用 设为True(默认False),不然无法递归触发

不晓得有没有更好的办法。

posted @ 2017-03-27 14:37  ℡__那些、年  阅读(791)  评论(0编辑  收藏  举报