Files
GMW/GMW_DB/dbo/Stored Procedures/stp_ParticolareInOutOk.sql
Samuele Locatelli a6d7ea0b2f Import iniziale DB, GMW
versione TK 2.4
inclusione schema voc x tabella lingue e vocabolario
2014-02-20 09:54:57 +01:00

52 lines
1.6 KiB
Transact-SQL

/***************************************
* 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