Controllo su campo ... trigger o altro

domenica 01 giugno 2008 - 23.56

squilibrio Profilo | Expert

Ciao, dovrei gestire una condizione su un campo decimal (18,2) basata sul valore contenuto in 3 campi decimal (18,2)

campi da controllare

Contratto
PreventivoUfficiale
PreventivoNonUfficiale


campo da aggiornare

TE_Cliente_K

che deve contenere rispettivamente

Contratto ... se questo campo è riempito (diverso da zero)
PreventivoUfficiale ... se questo campo è riempito (diverso da zero)
PreventivoNonUfficiale ... se questo campo è riempito (diverso da zero)

Ovviamente se è "riempito" il campo Contratto, è solo questo quello da considerare, in caso contrario il piu importante diventa il PreventivoUfficiale e se nessuno dei primi due è pieno basta controllare PreventivoNonUfficiale

Quindi se
Contratto 4
PreventivoUfficiale 5
PreventivoNonUfficiale 6

dovrò salvare/aggiornare il valore di contratto (perchè è quello piu importante)... anche se modifico i valori dei preventivi


se

Contratto
PreventivoUfficiale 5
PreventivoNonUfficiale 6

dovrò salvare il valore 5 ... anche se modifico il valore di PreventivoNonUfficiale

salverò 5 finche non avrò un valore nel campo Contratto ... e se verrà cancellato (impostato a zero) il valore di PreventivoUfficiale, dovrà inserire il valore di PreventivoNonUfficiale....


io ho provato con


[TE_Cliente_K] AS
CASE
WHEN [TE_PreventivoNonUfficiale] IS NOT NULL OR [TE_PreventivoNonUfficiale] > 0 THEN [TE_PreventivoNonUfficiale]
WHEN [TE_PreventivoUfficiale] IS NOT NULL OR [TE_PreventivoUfficiale] > 0 THEN [TE_PreventivoUfficiale]
WHEN [TE_Contratto] IS NOT NULL OR [TE_Contratto] > 0 THEN [TE_Contratto
END


Ma non sembra funzinare correttamente, ovvero: quando i campi sono tutti allo stato iniziale (0) funziona correttamente, ma quanto sono tutti pieni no


come posso gestire la mia situazione? (mi andrebbe benissimo anche un trigger!! (anzi... meglio!)

Grazie

lbenaglia Profilo | Guru

>come posso gestire la mia situazione? (mi andrebbe benissimo
>anche un trigger!! (anzi... meglio!)

Motiva il tuo "anzi... meglio".
I trigger vanno utilizzati SOLO quando non esistono altre soluzioni (colonne calolate o constraint) dato che mantengono attiva la transazione fino al termine della loro esecuzione, aumentando la durata dei locks e di conseguenza creando potenziali problemi di deadlock e scalabilità dell'applicazione.

Su it.sql ti ho illustrato come procedere.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

squilibrio Profilo | Expert

Preferivo il trigger per abitudine!!

Scusa ma non posso connettermi al newsgroup


ho cercato di utilizzare la tua prima soluzione per gestire il problema dei 3 campi (condizione su 3 campi) ma mi sono perso

(purtroppo non mi connetto al newsgroup da questa postazione)

lbenaglia Profilo | Guru

>Preferivo il trigger per abitudine!!
Brutta abitudine

>(purtroppo non mi connetto al newsgroup da questa postazione)
Google è tuo amico:
http://groups.google.it/group/microsoft.public.it.sql/msg/45d633f393466a88

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

squilibrio Profilo | Expert

Grazie mille!!!
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