Create
table
Menu
(
Codigo
int
identity(1,1)
primary
key
,
Descricao
varchar
(50)
not
null
CodigoPai
)
INSERT
INTO
Menu(Descricao)
values
'Arquivo'
),(
'Editar'
'Ajuda'
Menu(Descricao,CodigoPai)
'Salvar'
,1), (
'Salvar Como'
,1),(
'Sair'
,1)
'Copiar'
,2), (
'Colar'
,2),(
'Recortar'
,2)
'Sobre'
,3)
'PDF'
,5), (
'Word'
,5),(
'Excel'
,5)
'Doc'
,12), (
'Docx'
,12)
WITH
cteMenu
AS
--Ancora
SELECT
Codigo, Descricao, CodigoPai, Codigo
Ordem, 1
Nivel
FROM
WHERE
IS
NULL
UNION
ALL
-- Consulta Recursiva
M.Codigo, M.Descricao, cte.Codigo,
CASE
WHEN
M.Codigo < 10
THEN
(Ordem * 10) + M.Codigo
ELSE
(Ordem*100) + M.Codigo
END
, Nivel +1
cte
INNER
JOIN
M
ON
cte.Codigo = M.CodigoPai
Replicate(
' '
, Nivel - 1) + Descricao MenuCompleto, Nivel
ORDER
BY
Cast
(Ordem