UPDATE su PROCEDURE

martedì 23 ottobre 2007 - 09.16

secks Profilo | Senior Member

So fare un loop in vb ma vorrei capire come si potrebbe fare con una procedure in SQL (se si può):

Ho una tabella di 1000 record formata dai seguenti campi:

Fornitore, Costo, Prezzo, Costo2 e Prezzo2

Se il fornitore = Pippo Costo2 = Costo + 3 e Prezzo2 = Costo2 + 5
Se il fornitore = Pluto Costo2 = Costo + 1 e Prezzo2 = Costo2 + 4

Potrei usare l'UPDATE:

UPDATE Tabella SET Costo2=Var1, Prezzo2=Var2 WHERE ... condizione

ma Var1 e Var2 come posso determinarli?

Forse mi perdo in un bicchiere d'acqua, mi servirebbe una dritta.

Ciao a tutti e grazie.
Paolo.

lbenaglia Profilo | Guru

>So fare un loop in vb ma vorrei capire come si potrebbe fare
>con una procedure in SQL (se si può):
Si può ma raramente si fa

>Se il fornitore = Pippo Costo2 = Costo + 3 e Prezzo2 = Costo2
>+ 5
>Se il fornitore = Pluto Costo2 = Costo + 1 e Prezzo2 = Costo2
>+ 4
>
>Potrei usare l'UPDATE:
>
>UPDATE Tabella SET Costo2=Var1, Prezzo2=Var2 WHERE ... condizione
>
>ma Var1 e Var2 come posso determinarli?

UPDATE Tabella SET Costo2 = Costo + 3, Prezzo2 = Costo2 WHERE fornitore = 'pippo'; UPDATE Tabella SET Costo2 = Costo + 1, Prezzo2 = Costo2 WHERE fornitore = 'pluto';

>Ciao a tutti e grazie.
Prego.

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

secks Profilo | Senior Member

Ho appena trovato la seguente possibilità:

UPDATE Tabella

SET Costo2 = ( CASE WHEN Fornitore = 'Pippo' THEN Costo +3 ELSE Costo +1 END )

WHERE fornitore = 'pippo';

è fattibile?
Puo' essere abbastanza veloce nel caso di 700.000 record?

Ciao.

lbenaglia Profilo | Guru

>Ho appena trovato la seguente possibilità:
>
>UPDATE Tabella
>
>SET Costo2 = ( CASE WHEN Fornitore = 'Pippo' THEN Costo +3 ELSE
>Costo +1 END )
>
>WHERE fornitore = 'pippo';
>
>è fattibile?
Per essere fattibile lo è, ma in questo modo eseguirai una scansione di tutta la tabella dato che andrai ad aggiornare TUTTE le righe della tabella.

Le due UPDATE che ti ho indicato invece aggiorneranno solo le righe pertinenti ai due fornitori specificati e, definendo un indice su di essi, probabilmente sarà sufficiente un index seek invece che un table scan.

>Puo' essere abbastanza veloce nel caso di 700.000 record?
Ti conviene provare

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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