Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

SQL: Se esiste, aggiorna, altrimenti, inserisci

Cercando il modo migliore di gestire con SQL una situazione in cui un dato deve essere aggiornato se esiste, o inserito se non esiste, mi sono imbattuto in questo buon post di Jeremiah Clark:

SQL: If Exists Update Else Insert

Jeremia afferma che il metodo classico:

IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')  
    UPDATE Table1 SET (...) WHERE Column1='SomeValue'  
ELSE  
    INSERT INTO Table1 VALUES (...)

non è il più efficente, in quando esegue sempre due table/index scan, uno per la SELECT ed una per l'UPDATE.

Il metodo più efficiente sembra essere il seguente:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'  
IF @@ROWCOUNT=0  
    INSERT INTO Table1 VALUES (...)

il quale esegue un solo table/index scan.

Comments