Delete a catena in una SP

lunedì 26 giugno 2006 - 19.33

ricky Profilo | Junior Member

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)
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5