表如下:表一: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字段中,以逗号隔开,也就是说这两个表中,每个角色对应的数据要同步,当有更新、删除等操作时,也是一样。
这样,用存储过程或者事务该怎么去实现,谢谢。
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字段中,以逗号隔开,也就是说这两个表中,每个角色对应的数据要同步,当有更新、删除等操作时,也是一样。
这样,用存储过程或者事务该怎么去实现,谢谢。
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
--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我这样写了一部分,不知道,可以怎样改改》》谢谢。
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