Trigger

giovedì 29 aprile 2021 - 19.11

skraus Profilo | Junior Member

In un database SQL Server ho una tabella UnitaDiMisura che ha un campo di chiave primaria char(4).

Questa tabella ha relazioni con almeno altre tre tabelle del medesimo DB. Con ognuna delle tre tabelle ha almeno due campi di chiave esterna (FK).

UnitaDiMisura
codUM (PK) char(4)

SCATOLE
idScatola (PK)
umDimensione (FK)
umVolume (FK)

IMBALLI
idImballo
umDimensione (FK)
umVolume (FK)

Le azioni di aggiornamento ed eliminazione a cascato sono impostate su nessuna azione. Per il Delete riesco a sopperire con un TRIGGER INSTEAD OF DELETE alla tabella UnitaDiMisura. Il mio problema è sull'update del campo PK della tabella UnitaDiMisura per operare, sempre con un trigger INSTEAD OF UPDATE un aggiornamento a caduta di tutti i campi in tutte le tabelle correlate.

Questo è il trigger che ho scritto:

ALTER TRIGGER dbo.TRG_MF_UNITA_MISURA_UPD
ON dbo.UnitaDiMisura
INSTEAD OF UPDATE
AS
BEGIN
IF (UPDATE(codUM))
BEGIN
DECLARE @CodUM_Inserito char(10)
DECLARE @CodUM_Eliminato char(10)
SELECT @CodUM_Inserito = CodUM, FROM inserted
SELECT @CodUM_Eliminato = CodUM FROM deleted

UPDATE UnitaDiMisura
SET CodUM=@CodUM_Inserito
FROM UnitaDiMisura INNER JOIN deleted on UnitaDiMisura .CodUM=deleted.CodUM

IF (@CodUM_Eliminato = 'M3')
BEGIN
UPDATE SCATOLE
SET SCATOLE.umVolumne=@CodUM_Inserito
FROM SCATOLE INNER JOIN deleted ON SCATOLE.umVolumne = deleted.CodUM

UPDATE IMBALLI
SET IMBALLI.umVolumne=@CodUM_Inserito
FROM IMBALLI INNER JOIN deleted ON IMBALLI.umVolumne = deleted.CodUM
END
END
END

Al momento, se provo a modificare il record della tabella UnitaDiMisura, con il valore M3, ottengo un errore di violazione dell'integrità, credo causato dal primo update sulla tabella UnitaDiMisura, perché giustamente sto inserendo un valore che non ha correlazione nei record figli.

Ho altresì provato ad alterare la sequenza degli update ma l'esito è sempre lo stesso.

Mi chiedo se è fattibile? se vi sono soluzioni alternative tenendo conto che non posso modificare il campo PK della tabella UnitaDiMisura?

Grazie.

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