角色权限一览表

结果如图:

制作方法:

一、创建JG_JS视图,活动的角色列表

CREATE VIEW [dbo].[JG_JS]
AS 
SELECT ROW_NUMBER()OVER(ORDER BY djsname ASC) AS id,djsname 
FROM juesdoc(NOLOCK)
WHERE beactive ='是' 

二、创建JG_MENU视图,菜单及菜单对应运行号列表

--菜单级数级通过
SELECT DISTINCT LEN(ccxlh) FROM skmenu WHERE mkbh='A1'
CREATE VIEW [dbo].[JG_MENU]
AS
SELECT a.ccxlh AS '编号'  
      ,a.gnmch AS '菜单|1级'
      ,ISNULL(b.gnmch,'') AS '菜单|2级'
      ,ISNULL(c.gnmch,'') AS '菜单|3级'
      ,ISNULL(d.gnmch,'') AS '菜单|4级'
      ,ISNULL(e.gnmch,'') AS '菜单|5级'
      ,ISNULL(f.gnmch,'') AS '菜单|6级'
      ,CASE WHEN a.gnbh<>'' THEN a.gnbh 
            WHEN b.gnbh<>''THEN b.gnbh
            WHEN c.gnbh<>'' THEN c.gnbh
            WHEN d.gnbh<>'' THEN d.gnbh
            WHEN e.gnbh<>'' THEN e.gnbh
            WHEN f.gnbh<>'' THEN f.gnbh
       ELSE '' END AS '运行号' 
FROM skmenu AS a(NOLOCK)
     LEFT JOIN(
				SELECT ccxlh,gnmch,gnbh
				FROM skmenu(NOLOCK) 
				WHERE mkbh ='A1'
					  AND LEN(ccxlh) = 4 
              ) AS b ON a.ccxlh = LEFT(b.ccxlh,2)
     LEFT JOIN(
				SELECT ccxlh,gnmch,gnbh
				FROM skmenu(NOLOCK) 
				WHERE mkbh ='A1'
					  AND LEN(ccxlh) = 6 
              ) AS c ON b.ccxlh = LEFT(c.ccxlh,4)
     LEFT JOIN(
				SELECT ccxlh,gnmch,gnbh
				FROM skmenu(NOLOCK) 
				WHERE mkbh ='A1'
					  AND LEN(ccxlh) = 8 
              ) AS d ON c.ccxlh = LEFT(d.ccxlh,6)
     LEFT JOIN(
				SELECT ccxlh,gnmch,gnbh
				FROM skmenu(NOLOCK) 
				WHERE mkbh ='A1'
					  AND LEN(ccxlh) = 10 
              ) AS e ON d.ccxlh = LEFT(e.ccxlh,8)
     LEFT JOIN(
				SELECT ccxlh,gnmch,gnbh
				FROM skmenu(NOLOCK) 
				WHERE mkbh ='A1'
					  AND LEN(ccxlh) = 12 
              ) AS f ON e.ccxlh = LEFT(f.ccxlh,10)
WHERE a.mkbh ='A1'
      AND LEN(a.ccxlh) = 2

三、创建SQL存储过程JG_CDJSQX,查询结果;

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE  PROCEDURE  [dbo].[JG_CDJSQX]    
AS
DECLARE @i INT,@max INT
SET @i =1
SELECT @max =COUNT(*) FROM JG_JS

DECLARE @StrSQL VARCHAR(8000)
SET @StrSQL =' SELECT a.* '
WHILE @i <= @max
BEGIN
	DECLARE @djsname CHAR(30)
	SET @djsname =''
	SELECT @djsname = LTRIM(RTRIM(djsname)) FROM JG_JS WHERE id =@i 
	SELECT @StrSQL = @StrSQL
	               +' ,['+LTRIM(RTRIM(@djsname))+'] = CASE WHEN b'+LTRIM(RTRIM(CONVERT(CHAR(10),@i)))+'.djsname IS NULL THEN '''' ELSE ''√'' END '
	               --+' ,['+LTRIM(RTRIM(@djsname))+'] = CASE WHEN b.djsname IS NULL THEN '''' ELSE ''√'' END '
	SET @i = @i + 1
END
	SELECT @StrSQL = @StrSQL
	               + ' FROM JG_MENU AS a ' 
SET @i =1
SELECT @max =COUNT(*) FROM JG_JS
WHILE @i <= @max
BEGIN
	DECLARE @djsname2 CHAR(30)
	SET @djsname2 =''
	SELECT @djsname2 = LTRIM(RTRIM(djsname)) FROM JG_JS WHERE id =@i 
	SELECT @StrSQL = @StrSQL
	               +' LEFT JOIN JG_JSGN AS b'+LTRIM(RTRIM(CONVERT(CHAR(10),@i)))+' ON a.运行号 = b'+LTRIM(RTRIM(CONVERT(CHAR(10),@i)))+'.gnbh AND b'+LTRIM(RTRIM(CONVERT(CHAR(10),@i)))+'.djsname='''+LTRIM(RTRIM(@djsname2))+''' '
	SET @i = @i + 1
END
	SELECT @StrSQL = @StrSQL 
	               + ' ORDER BY a.编号 ASC '


EXEC(@StrSQL) 
--SELECT @StrSQL

猜你喜欢

转载自blog.csdn.net/NO66781/article/details/82768005