表如下:表一:TDOA_WRRolePageType
RoleCode WRPageType SortNo 
10---------1-----------3
10---------2-----------1
10---------3-----------2
10---------4-----------4
20---------1-----------5
20---------2-----------6
30---------3-----------7
40---------2-----------8
40---------4-----------9 表二:TDOA_WRRole
RoleCode-------RoleName------WRPageDescs
10---------销售员-----------2,3,1,4
20---------行政人员---------1,2
30---------人事-------------3
40---------办公-------------2,4
表三:TDOA_WRPage
WRPageType-----WRPageName
1---------------公共
2---------------客户
3---------------项目
4---------------任务
5---------------工程
6---------------计划
……
在以上三个表中,为某个角色选取TDOA_WRPage表中的内容,可一个,可多个,选中后,当在程序中保存的时候,想将从
TDOA_WRPage得到的内容,全部一次性放到TDOA_WRRolePageType中,同时将每个角色对应的WRPageType字段内容放到TDOA_WRRole表的WRPageDescs字段中,以逗号隔开,也就是说这两个表中,每个角色对应的数据要同步,当有更新、删除等操作时,也是一样。
这样,用存储过程或者事务该怎么去实现,谢谢。

解决方案 »

  1.   

    用觸發器控制,當TDOA_WRRolePageType變化時,更新TDOA_WRRole表
      

  2.   

    沒測過,這里舉個例子
    CREATE TRIGGER tr_TDOA_WRRolePageType_insert ON TDOA_WRRolePageType
    FOR UPDATE,INSERT,DELETE
    AS
    BEGIN
    UPDATE b
    SET [WRPageDescs]=a.[WRPageDescs]
    FROM 
    (SELECT RoleCode,[WRPageDescs]=STUFF((SELECT ','+RTRIM(WRPageType) FROM TDOA_WRRolePageType WHERE RoleCode=i.RoleCode ORDER BY SortNo FOR XML PATH('')) ,1,1,'')
    FROM INSERTED AS i 
    GROUP BY RoleCode)a
    INNER JOIN TDOA_WRRole AS b ON a.RoleCode=b.RoleCode

    UPDATE b
    SET [WRPageDescs]=a.[WRPageDescs]
    FROM 
    (SELECT RoleCode,[WRPageDescs]=STUFF((SELECT ','+RTRIM(WRPageType) FROM TDOA_WRRolePageType WHERE RoleCode=d.RoleCode ORDER BY SortNo FOR XML PATH('')) ,1,1,'')
    FROM deleted AS d 
    GROUP BY RoleCode)a
    INNER JOIN TDOA_WRRole AS b ON a.RoleCode=b.RoleCode

    END
      

  3.   


    --1、根据角色删除TDOA_WRRolePageType表中,角色对应内容
    declare @RoleCode nvarchar(20),@WRPageType nvarchar(20),@WRPageDescs nvarchar(20)
    select @RoleCode='10'
    delete from TDOA_WRRolePageType where RoleCode=@RoleCode--2、将角色对应的所有数据插入到表中
    select @RoleCode='10'
    insert into dbo.TDOA_WRRolePageType(RoleCode,WRPageType,SortNo)
    select @RoleCode,WRPageType,SortNo from TDOA_WRPage  where @WRPageType+',' like '%'+WRPageType+',%'
    --3、将角色对应的所有数据取出,以固定格式,如(2,1,3,4)更新到角色表中,sortNo排序
    SELECT @RoleCode='10'
    set @WRPageDescs=(select WRPageType+',' from TDOA_WRRolePageType where RoleCode=@RoleCode ORDER BY SortNo for xml path(''))
    SELECT  @WRPageDescs
    update dbo.TDOA_WRRole set WRPageDescs=@WRPageDescs where RoleCode=@RoleCode我这样写了一部分,不知道,可以怎样改改》》谢谢。
      

  4.   


    declare @RoleCode nvarchar(20),@WRPageType nvarchar(20),@WRPageDescs nvarchar(20)
    select @RoleCode='10'
    delete from TDOA_WRRolePageType where RoleCode=@RoleCode
    select @RoleCode='10'
    insert into dbo.TDOA_WRRolePageType(RoleCode,WRPageType,SortNo)
    select @RoleCode,WRPageType,SortNo from TDOA_WRPage where ','+@WRPageType+',' like '%,'+WRPageType+',%'
    SELECT @RoleCode='10'
    set @WRPageDescs=STUFF((select ','+RTRIM(WRPageType) from TDOA_WRRolePageType where RoleCode=@RoleCode ORDER BY SortNo for xml path('')),1,1,'')
    SELECT @WRPageDescs
    update dbo.TDOA_WRRole set WRPageDescs=@WRPageDescs where RoleCode=@RoleCode