If Exists Update Else Insert

Offrimi un Caffè

Questa è una situazione abbastanza comune che si verifica quando si eseguono operazioni su database. Ad esempio, quando una Stored Procedure viene chiamata per inserire dei record, ma se esistono già dobbiamo aggiornarli, si può usare la seguente sintassi:

 

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

 

 

 

Questa sintassi, nonostante sia da "manuale", presenta uno svantaggio, ciè che si trova a dover eseguire 2 scansioni della tabella, una per verificare se il record esiste (IF EXISTS) e una per l'eventuale UPDATE. Per snellire l'esecuzione, si può utilizzare la seguente sintassi:

 

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

 

 

Entrambe le sintassi sono corrette, ma la seconda nel caso di molte esecuzioni sulla stessa Store Procedure, per aggiornare o inserire diversi record, da prestazioni migliori.