martes, 30 de diciembre de 2014

SQL SERVER: Consultas recursivas

Esta técnica sirve para conocer los registros hijos en forma recursiva. También puede funcionar en tablas que se referencian a si mismas siempre y cuando se apliquen los ajustes en las consultas.

Case 1


Employee IDNameSupervisor ID
001Paroar HabibNull
002Sumon Mazumder001
003Kalim Uddin001
004Jewel Ahmed002

Case 2


vmenuidvmenunamevparent
M001HR SystemNull
M002PayrollM001
M003Salary BenefitsM002
M004RecruitmentM001

Aplicando la consulta:
WITH security_menu_Recursive(Parent,MenuId,MenuName,LEVEL)
AS
(
    SELECT vparent,vmenuid,vmenuname,0 AS LEVEL FROM dbo.SecurityMenu WHERE vParent = null
    UNION ALL
    SELECT vparent,vmenuid,vmenuname,Level + 1 AS LEVEL FROM dbo.SecurityMenu
    INNER JOIN security_menu_Recursive AS smr ON smr.menuid = dbo.SecurityMenu.vParent
)
SELECT parent,menuid,menuname,LEVEL FROM security_menu_Recursive

Resultado:

ParentMenuIDMenuNameLevel
NullM001HR System0
M001M002Payroll1
M001M004Recruitment1
M002M003Salary Benefits2


Ejemplo completo en codeproject.com


No hay comentarios: