Microsoft SQL Serverde tabloyu recursive sorgulama nasıl yapılır?
Kullanıcılara atanmış profile bağlı menüleri modüller ve upper menü dallarına göre sorgulamayı aşağıdaki tablo yapısı ve sorgu ile yapabiliriz.
Tablo Yapısı ;
SIS_MENU_DEF

SIS_PROFILE_MENU_DET

WITH n(MENU_CODE, UPPER_MENU,LEVEL,MENU_TYPE,MENU_LABEL,PROFILE_CODE,ORDER_NO) AS(
SELECT MENU_CODE ,
UPPER_MENU, 0 AS LEVEL,MENU_TYPE,MENU_LABEL,PROFILE_CODE,ORDER_NO
FROM MENULER
WHERE ISNULL(PROFILE_CODE,'XXXX') IN('PR002','XXXX')
AND UPPER_MENU = '000040'
AND MENU_TYPE != 'SC'
union all
SELECT mx.MENU_CODE ,
mx.UPPER_MENU, LEVEL+1 ,mx.MENU_TYPE,mx.MENU_LABEL,mx.PROFILE_CODE ,mx.ORDER_NO
FROM MENULER mx, n
WHERE mx.UPPER_MENU= n.MENU_CODE
)SELECT MENU_CODE,MENU_LABEL,MENU_TYPE,UPPER_MENU,
CASE WHEN ISNULL(PROFILE_CODE,'1') = '1' THEN ' ' ELSE 'checked' END ISARET,
CASE WHEN ISNULL(PROFILE_CODE,'1') = '1' THEN '0' ELSE '1' END VARYOK,ORDER_NO,LEVEL FROM n
MENULER VIEW
CREATE VIEW [dbo].[MENULER] AS
SELECT m.MENU_CODE ,
m.UPPER_MENU, m.MENU_TYPE,m.MENU_LABEL,mx.PROFILE_CODE ,m.ORDER_NO
FROM SIS_PROFILE_MENU_DET as mx
RIGHT OUTER JOIN SIS_MENU_DEF m ON m.MENU_CODE = mx.MENU_CODE
Son Yorumlar