Devo crearmi una o più tabelle che contengano dei dati relativi a dei batch caricati in silos di stoccaggio. Mi sono creato poi delle procedure che vanno ad aggiornare la tabella a seconda delle operazioni di carico e scarico eseguite, che sono le seguenti
ALTER PROCEDURE [dbo].[AddBatch] @BatchNr varchar(6), @Qta float AS
DECLARE @qtemp float
SELECT * FROM TabellaSilo WHERE BatchNr=@BatchNr
IF (@@ROWCOUNT=0)
BEGIN
INSERT INTO TabellaSilo(BatchNr,Qta) VALUES(@BatchNr,@Qta)
END
ELSE
BEGIN
SET @qtemp=(SELECT Qta FROM TabellaSilo WHERE BatchNr=@BatchNr)
SET @qtemp=@qtemp + @Qta
UPDATE TabellaSilo SET Qta=@qtemp WHERE BatchNr=@BatchNr
END
ALTER PROCEDURE [dbo].[DecBatch] @Qta float AS
DECLARE @qtemp float
DECLARE @qtot float
DECLARE @qupd float
SET @qtot=@Qta
DECLARE Indice CURSOR DYNAMIC FOR
SELECT Qta FROM TabellaSilo ORDER BY Data ASC
FOR UPDATE;
OPEN Indice;
IF (@qtot>=(SELECT SUM(Qta) FROM TabellaSilo))
BEGIN
DELETE FROM TabellaSilo
GOTO Uscita
END
WHILE (@qtot>0)
BEGIN
FETCH NEXT FROM Indice INTO @qtemp;
IF (@qtemp>@qtot)
BEGIN
SET @qupd=@qtemp - @qtot
SET @qtot=@qtot - @qtemp
UPDATE TabellaSilo SET Qta=@qupd WHERE current of Indice
END
ELSE
BEGIN
SET @qtot=@qtot - @qtemp
DELETE FROM TabellaSilo WHERE current of Indice
END
END
Uscita:
CLOSE Indice
DEALLOCATE Indice
GO
Questo è un esempio per gestire un solo silo. Vorrei chiedervi quale sia la soluzione migliore per poter gestire più sili; se creo una tabella per ogni silo non saprei poi come variare le procedure per poterle riutilizzare; altrimenti potrei tenere un'unica tabella ed aggiungere una colonna silo per indicare il numero del silo, ma non saprei come definire una chiave primaria visto che ora ho usato il BatchNr considerando più sili potrei avere lo stesso BatchNr dentro più di essi.
Avreste qualche suggerimento su come impostare al meglio la cosa?
Marco