
/***************************************
* STORED stp_getParticolareOutputOk
*
* Ritorna se il particolare IN ( UDC in Ingresso ) sia presente nella distinta del 
* particolare OUT ( UDC in Uscita / creazione )
* 
* Steamware, G.A.R.
* mod: 2014.02.12
*
*    EXECUTE dbo.stp_ParticolareInOutOk '1LVT00380000', '1GRZ00370000' , TRUE
*    EXECUTE dbo.stp_ParticolareInOutOk '1LVT00380000', '1LVT00380000' , FALSE
*
****************************************/
CREATE PROCEDURE dbo.stp_ParticolareInOutOk
(
    @ParticolareOUT AS NVARCHAR(50) = '', 
    @ParticolareIN  AS NVARCHAR(50) = '',
    @FlgPartSame    AS BIT          = 1     -- se true due particolari uguali è OK 
)
AS
BEGIN

	SET NOCOUNT ON;
    DECLARE @Return AS INT;

    -- se il particolare in ingresso è uguale  
    IF @ParticolareOUT = @ParticolareIN AND @FlgPartSame = 1
        BEGIN   SELECT 1 AS Trovati;
                RETURN;    -- esco
        END

    -- Cte ricorsiva che a fronte del particolare passati mi ritorna tutto l'albero della distinta
    ;WITH DistintaCTE ( Particolare , Padre, Figlio, Level ) AS 
    (
        SELECT @ParticolareOUT, d.Padre, d.Figlio, 0 AS Level 
        FROM RilPro.DistintaAS400 AS d
        WHERE d.Padre = @ParticolareOUT
            UNION ALL
        SELECT Particolare, p.Padre, p.Figlio, Level + 1    -- select ricorsiva
        FROM RilPro.DistintaAS400 AS p
        INNER JOIN DistintaCTE AS f ON p.Padre = f.Figlio
    )
    --SELECT Particolare, * FROM DistintaCTE
    SELECT @Return = COUNT(*) FROM DistintaCTE
    WHERE Figlio = @ParticolareIN
    OPTION (MAXRECURSION 1000);  -- max n. sottolivelli

    SELECT @Return AS Trovati;

END
