Torna al Thread

USE tempdb; GO CREATE TABLE #tab_prodotti_quantita ( articolo_composto nvarchar(10) NOT NULL , articolo_componente int NOT NULL , quantita_componente int NOT NULL ); GO CREATE TABLE #tab_prodotti_prezzi ( codice_padre_prezzo int NOT NULL , quantita_prezzo decimal(18, 2) NOT NULL ); GO INSERT INTO #tab_prodotti_quantita (articolo_composto, articolo_componente, quantita_componente) VALUES ('UNO', 1, 10) , ('DUE', 2, 20) , ('TRE', 3, 3) , ('TRE', 3, 30) , ('TRE', 3, 33) , ('QUATTRO', 4, 40) , ('QUATTRO', 4, 400) , ('QUATTRO', 4, 4000) , ('CINQUE', 5, 50); GO INSERT INTO #tab_prodotti_prezzi (codice_padre_prezzo, quantita_prezzo) VALUES (1, 100) , (2, 200) , (3, 300) , (4, 400) , (5, 500); GO CREATE PROCEDURE dbo.proc_ValutaMinimoAcquistabile @articolo_composto nvarchar(10) , @MinimoAcquistabile int = 0 OUT AS BEGIN SET NOCOUNT ON; SET @MinimoAcquistabile = 0; -- caso "INTERROMPI" - basta che un elemento abbia QuantitaGiacenza < QuantitaMinima, torno @MinimoAcquistabile = 0 IF EXISTS(SELECT 1 FROM #tab_prodotti_prezzi P JOIN #tab_prodotti_quantita Q ON P.codice_padre_prezzo = Q.articolo_componente WHERE Q.articolo_composto = @articolo_composto AND P.quantita_prezzo < Q.quantita_componente) RETURN; -- dividendi (solo dove QuantitaGiacenza >= QuantitaMinima) SELECT ValoreDivisione = P.quantita_prezzo / Q.quantita_componente INTO #temp_dividendi --> popolo i dividendi, se ci sono FROM #tab_prodotti_prezzi P JOIN #tab_prodotti_quantita Q ON P.codice_padre_prezzo = Q.articolo_componente WHERE Q.articolo_composto = @articolo_composto AND P.quantita_prezzo >= Q.quantita_componente; IF @@ROWCOUNT = 0 RETURN; SELECT @MinimoAcquistabile = MIN(ValoreDivisione) FROM #temp_dividendi; END GO -- EXECUTE (INTERROTTO) DECLARE @m int; EXEC dbo.proc_ValutaMinimoAcquistabile @articolo_composto = 'QUATTRO' , @MinimoAcquistabile = @m out; SELECT 'Minimo Acquistabile' = @m; GO -- -- EXECUTE (CON MINIMO) DECLARE @m int; EXEC dbo.proc_ValutaMinimoAcquistabile @articolo_composto = 'TRE' , @MinimoAcquistabile = @m out; SELECT 'Minimo Acquistabile' = @m; GO -- DROP PROCEDURE dbo.proc_ValutaMinimoAcquistabile; GO DROP TABLE #tab_prodotti_prezzi; GO DROP TABLE #tab_prodotti_quantita; GO
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5