Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

T-SQL E' possibile fare un Update/Inserire con una sola operazione veloce

SQL Server 2008 e versioni successive hanno un'istruzione MERGE che fa esattamente questo.

Consulta i documenti MSDN Books Online su MERGE per i dettagli.

Fondamentalmente, hai bisogno di quattro cose:

  • una fonte (tabella o visualizzazione o istruzione SELECT inline)
  • un obiettivo
  • un ISCRIVITI condizione che unisce i due
  • dichiarazioni per i casi in cui è presente una MATCH (righe esistono sia nell'origine che nella destinazione), NOT MATCHED (quando la riga non esiste ancora nella destinazione) e così via

Quindi in pratica definisci qualcosa come:

MERGE (targettable) AS t
USING (sourcetable) AS s
ON (JOIN condition between s and t)
WHEN MATCHED THEN
   UPDATE SET t.Col1 = s.Col1, t.Col2 = s.Col2 (etc.)
WHEN NOT MATCHED THEN
   INSERT(Col1, Col2, ..., ColN) VALUES(s.Col1, s.Col2, ......, s.ColN)

Questo viene fatto come un'unica istruzione e altamente ottimizzato da SQL Server.