Ciao, ho provato ad effettuare una cancellazione a catena in una SP, ma non
riesco a gestire una condizione nell'operazione di delete di una tabella
collegata:
CREATE TABLE [dbo].[OrdiniProduzioneTestata](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDClienti] [int] NULL CONSTRAINT [DF__prodt_ord__ID_CL__589C25F3] DEFAULT
((0)),
[Numero] [varchar](15) COLLATE Latin1_General_CI_AS NULL,
[Data] [datetime] NULL
)
insert OrdiniProduzioneTestata (77,1,0001,01/01/2006)
CREATE TABLE [dbo].[MagazzinoMovimenti](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDMagazzini] [int] NULL,
[IDDocumento] [int] NULL,
[IDUbicazioneArticoli] [int] NULL,
[IDArticoli] [int] NULL,
[TipoMovimento] [varchar](2) COLLATE Latin1_General_CI_AS NULL,
[Data] [datetime] NULL,
[Qta] [int] NULL,
[Importo] [decimal](18, 4) NULL CONSTRAINT [DF_MagazzinoMovimenti_Importo]
DEFAULT ((0)),
[Causale] [varchar](1) COLLATE Latin1_General_CI_AS NULL,
)
insert MagazzinoMovimenti (1,1,77,650,25,'CP',01/01/2006,10,'C')
insert MagazzinoMovimenti (2,1,77,650,25,'CP',01/01/2006,10,'C')
insert MagazzinoMovimenti (3,1,77,652,27,'CP',01/01/2006,30,'C')
insert MagazzinoMovimenti (4,1,77,653,28,'SP',01/01/2006,80,'S')
Nella mia SP eseguo la cancellazione di OrdiniProduzioneTestata ma in
automatico devo cancellare anche i movimenti collegati,
quindi i movimenti che hanno IDDocumento come l'ID della testata che
cancello, e questo non sarebbe un problema in quanto passo direttamente l'ID
della testata alla SP, quindi lo uso anche per cancellare tutti i movimenti
tramite MagazzinoMovimenti.IDDocumento
Il vero problema è:
prima di cancellare il contenuto di MagazzinoMovimenti, voglio aggiornare la
tabella
CREATE TABLE [dbo].[MagazzinoUbicazioniArticolo](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDArticoli] [int] NULL,
[QtaGiac] [float] NULL,
[QtaImp] [float] NULL
)
aumentando o diminuendo la quantità giacenza in base all'operazione della
tabella MagazzinoMovimenti(Carico o Scarico di produzione)
come?
l'IDUbicazioneArticoli di MagazzinoMovimenti che sto cancellando, è
collegato a ID.MagazzinoUbicazioniArticolo
quindi se
MagazzinoMovimenti.Tipomovimento = 'CP' (carico prod) devo decrementare
MagazzinoUbicazioniArticolo.QtaGiac per la quantità MagazzinoMovimenti.Qta
se
MagazzinoMovimenti.Tipomovimento = 'SP' (scarico prod) devo incrementare
MagazzinoUbicazioniArticolo.QtaGiac per la quantità MagazzinoMovimenti.Qta
Questa operazione per tutte le righe cancellate
BEFORE DELETE
insert MagazzinoUbicazioniArticolo (650,25,77,100)
insert MagazzinoUbicazioniArticolo (651,26,77,100)
insert MagazzinoUbicazioniArticolo (652,27,77,100)
insert MagazzinoUbicazioniArticolo (653,28,77,100)
AFTER DELETE dovrebbe essere (se non ho sbaliato niente)
insert MagazzinoUbicazioniArticolo (650,25,77,80) -> (100-10-10)
insert MagazzinoUbicazioniArticolo (651,26,77,100)
insert MagazzinoUbicazioniArticolo (652,27,77,70) -> (100-70)
insert MagazzinoUbicazioniArticolo (653,28,77,180) -> (100+80)


Rispondi quotando
