Come impostare tabella

lunedì 01 agosto 2011 - 15.55
Tag Elenco Tags  SQL Server 2005

peska78 Profilo | Newbie

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

lbenaglia Profilo | Guru

>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?

Ciao Marco,

Questa è sicuramente la soluzione migliore.
Per quanto riguarda la PK puoi definirla sulle colonne BatchNr e SiloNr.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

peska78 Profilo | Newbie

Ciao Lorenzo, grazie per la pronta risposta; in effetti ero ormai abbastanza convinto che fosse questa la strada migliore da seguire
Marco
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5