Sulla Programmazione

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

tag: Performance

SQL: inserimento di record multipli con una singola query

Ecco cosa ho trovato cercando icome inserire più record in una tabella con una singola query SQL:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
USE YourDB 
GO 
INSERT INTO MyTable (FirstCol, SecondCol) 
  SELECT 'First' ,1 
  UNION ALL 
  SELECT 'Second' ,2 
  UNION ALL 
  SELECT 'Third' ,3 
  UNION ALL 
  SELECT 'Fourth' ,4 
  UNION ALL 
  SELECT 'Fifth' ,5 
GO

La dritta la trovate nel post di Pinal Dave:

SQL SERVER – Insert Multiple Records Using One Insert Statement – Use of UNION ALL

Dai test eseguiti dai lettori del blog di Pinal Dave, sembra che questo metodo arrivi ad ...

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 ...