-- [sp_getSezioni_ByIdReport_TreeView_Fabrizio] 1
CREATE  PROCEDURE [dbo].[sp_getSezioni_ByIdReport_TreeView_Fabrizio]
@pIdReport as int
AS
BEGIN
select DtCreazione, 
			DtCancellazione, 
			IdReport, 
			IdSezione,
			IdSezionePadre,
			Utente, 
			Descrizione,
			TpSezione,
			NomeControlloGruppo,
			internalSectionCode,
			IsMandatory,
			IsDefault,
			ClasseVisualizzazione as CSSClassName
into #tabella from sezione
WHERE       (IdReport = @pIdReport) 
;with cte(DtCreazione, DtCancellazione,IdReport, IdSezione, IdSezionePadre, Utente, Descrizione,TpSezione,NomeControlloGruppo,internalSectionCode,IsMandatory,IsDefault, CSSClassName, livello, ordinamento) as
(
	SELECT      DtCreazione, 
				DtCancellazione, 
				IdReport, 
				IdSezione,
				IdSezionePadre,
				Utente, 
				Descrizione,
				TpSezione,
				NomeControlloGruppo,
				internalSectionCode,
				IsMandatory,
				IsDefault,
				CSSClassName,
				0 as livello,
				CAST(IdSezione AS VARBINARY(900)) as ordinamento
	FROM        #tabella 
	WHERE       IdSezionePadre IS NULL
	UNION ALL
	SELECT      a.DtCreazione, 
				a.DtCancellazione, 
				a.IdReport, 
				a.IdSezione,
				a.IdSezionePadre,
				a.Utente, 
				a.Descrizione,
				a.TpSezione,
				a.NomeControlloGruppo,
				a.internalSectionCode,
				a.IsMandatory,
				a.IsDefault,
				a.CSSClassName,
				(b.livello + 1) as livello,
				CAST(b.ordinamento + CAST(a.IdSezione AS BINARY(4)) AS VARBINARY(900)) as ordinamento
	FROM		#tabella a 
	JOIN		cte b ON a.IdSezionePadre = b.IdSezione 
)
	SELECT	cast( REPLICATE('|  ', livello) + Descrizione as varchar(50)) as Albero, 		
			livello,			
			IdReport, 
			IdSezione,
			IdSezionePadre, 
			Descrizione, 
			TpSezione,
			NomeControlloGruppo,
			internalSectionCode,
			IsMandatory,
			IsDefault,
			CSSClassName
			FROM cte
ORDER BY ordinamento
OPTION (MAXRECURSION 5);
drop table #tabella
END