介绍:
现在有两个表,一个是系统菜单dbo.App_URL,一个是用户权限表dbo.App_User,
每个用户登陆系统后菜单是从权限表里来显示.
菜单ID有三级,一级是两个数字(如01),二级四个如(0101),三级是六个数据(010101)
dbo.App_URL表: App_URL_ID, App_URL_Name, App_URL, App_Sort(排序)
dbo.App_User表: 字段 ID,User_id(用户ID), App_URL_ID(菜单ID),Manage_Or_view(管理或浏览权限, 1为管理,2为浏览)举例dbo.App_User数据:
ID User_ID App_URL_ID Manage_Or_view
2000 025 03 1
2001 025 0301 1
2003 025 0302 1
2004 025 0303 1App_URL_ID, App_URL_Name, App_URL, App_Sort
03 行政管理 null 2
0301 月绩考评 null 1
030101 个人考评 Person.aspx 1
030102 部门考评 depart.aspx 1
0302 公告 notice.aspx 1
0303 制度 law.aspx 1问题
在日常权限分配时,有的是有三级权限,有的是有二级, 现在出现这样的情况, 当把某个菜单的三级权限全取消了,结果在数据库里还留有该三级的上一级菜单数据(二级),这个二级关联到菜单表,如果还有这个二级菜链接字段为空,则为垃圾数据,没有任何作用.需要删除。 像上面的dbo.App_User表中第二条2001就是垃圾数据。现在要把这些垃圾数据(多用户批量)用sql语句删除掉. 请问如何实现.万分感谢!
现在有两个表,一个是系统菜单dbo.App_URL,一个是用户权限表dbo.App_User,
每个用户登陆系统后菜单是从权限表里来显示.
菜单ID有三级,一级是两个数字(如01),二级四个如(0101),三级是六个数据(010101)
dbo.App_URL表: App_URL_ID, App_URL_Name, App_URL, App_Sort(排序)
dbo.App_User表: 字段 ID,User_id(用户ID), App_URL_ID(菜单ID),Manage_Or_view(管理或浏览权限, 1为管理,2为浏览)举例dbo.App_User数据:
ID User_ID App_URL_ID Manage_Or_view
2000 025 03 1
2001 025 0301 1
2003 025 0302 1
2004 025 0303 1App_URL_ID, App_URL_Name, App_URL, App_Sort
03 行政管理 null 2
0301 月绩考评 null 1
030101 个人考评 Person.aspx 1
030102 部门考评 depart.aspx 1
0302 公告 notice.aspx 1
0303 制度 law.aspx 1问题
在日常权限分配时,有的是有三级权限,有的是有二级, 现在出现这样的情况, 当把某个菜单的三级权限全取消了,结果在数据库里还留有该三级的上一级菜单数据(二级),这个二级关联到菜单表,如果还有这个二级菜链接字段为空,则为垃圾数据,没有任何作用.需要删除。 像上面的dbo.App_User表中第二条2001就是垃圾数据。现在要把这些垃圾数据(多用户批量)用sql语句删除掉. 请问如何实现.万分感谢!
FROM App_User AS a
INNER JOIN App_URL AS b ON b.App_URL_ID=a.App_URL_ID
WHERE b.App_URL IS NULL
OR NOT EXISTS(SELECT 1 FROM App_URL AS x WHERE x.App_URL_ID LIKE b.App_URL_ID+'%' AND x.App_URL_ID!=b.App_URL_ID)
SELECT *
FROM App_User a
where exists(select * from APP_URL_NAME b
where b.APP_URL_ID like a.APP_URL_ID + '__')
and not exists(select * from App_User c
where c.APP_URL_ID like a.APP_URL_ID + '__')
DELETE FROM a
FROM App_User AS a
WHERE
--1、在菜单的设置表里查到该菜单具有子菜单的条件
EXISTS(SELECT 1 FROM App_URL AS x WHERE charindex(a.App_URL_ID ,x.App_URL_ID )>0 AND x.App_URL_ID!=a.App_URL_ID )
and
--2、在权限设置表里查到该菜单没有配置子菜单的条件,并且用户id相同
not EXISTS(SELECT 1 FROM App_User AS b WHERE charindex(a.App_URL_ID ,b.App_URL_ID )=0 AND a.App_URL_ID<>b.App_URL_ID and a.User_ID=b.User_ID)