Problema trigger di aggiornamento record correlati dopo un delete

venerdì 16 giugno 2006 - 01.23

ricky Profilo | Junior Member

Ciao posto un problema :

use tempdb
go
create table OrdiniVenditaRighe(ID int,TipoDoc
varchar(2),NumeroDoc,IDROrdiniVendita int,IDTestata int)
go
insert into OrdiniVenditaRighe values(7,'OV',1,1,1)
insert into OrdiniVenditaRighe values(8,'OV',1,2,1)
insert into OrdiniVenditaRighe values(9,'OV',2,3,2)
insert into OrdiniVenditaRighe values(10,'DT',012006,7,3)
insert into OrdiniVenditaRighe values(11,'DT',012006,8,3)
insert into OrdiniVenditaRighe values(12,'DT',012006,9,3)
go

Quindi

Due Ordini OV (numero doc 1 e 2) vengono inseriti in un unico DT (012006)
con appunto tre elementi (con riferimento ai 3 elementi dell'ordine 7,8,9)

Ho una tabella testata per i vari documenti
create table OrdiniVenditaTesta(ID int,TipoDoc varchar(2),Stato varchar)

insert into OrdiniVenditaTestavalues(1,'OV',??)
insert into OrdiniVenditaTestavalues(2,'OV',??)
insert into OrdiniVenditaTestavalues(3,'DT',??)


A questo punto se cancello un documento, nel mio caso il DT, devo modificare
lo stato della testata dei documenti che ne facevano parte (in questo caso
devo modificare lo stato dei due ordini corrispondendi agli ID 1,2 della
testata -> IDTestata int)

Basandomi su questa logica:

Se cancello un OV metto allo stato della testata dei documenti che avevano generato l'OV lo stato P
Se cancello un DT metto allo stato della testata dei documenti avevano generato la DT (quindi l'OV) lo statao C

Quindi, io non devo modificare lo stato del documento in considerazione (come viene mi sembra venga fatto nel trigger allegato) ma del documento (testata) che ha generato il documento in considerazione

In sintesi la logica è la seguente: dalle righe del mio documento cancellato, recupero IDROrdiniVendita che rappresenta l'ID della riga del documento che l'ha generata (quindi del
documento padre), da questa riga ricavo l'ID della testata e a questo modifico lo stato della testata (dato che si tratta appunto della testata del documento "padre" del documento che sto cancellando)

E' piu facile capire la logica che scriverla ... ma il vero problema è il trigger

Qualcuno può aiutarmi?

create trigger tr_Delete on OrdiniVenditaRighe
for delete
as
update OrdiniVenditaTesta
set Stato=case v.TipoDoc when 'OV' then 'P'
when 'DT' then 'C'
else Stato end
from(select IDTestata,TipoDoc from deleted
group by IDTestata,TipoDoc)v
where v.IDTestata=OrdiniVenditaTesta.ID
go


Thanks
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