Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

T-SQL É possível fazer um Update / Insert com uma única operação rápida


SQL Server 2008 e mais recentes têm uma instrução MERGE que faz exatamente isso.

Consulte os documentos do MSDN Books Online sobre MERGE para detalhes.

Basicamente, você precisa de quatro coisas:
  • uma fonte (tabela ou exibição ou instrução SELECT embutida)
  • um alvo
  • um INSCREVA-SE condição que liga os dois
  • instruções para casos em que há um MATCH (existem linhas na origem e no destino), NOT MATCHED (quando a linha ainda não existe no destino) e assim por diante

Então você basicamente define algo como:
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)

Isso é feito como uma instrução e altamente otimizado pelo SQL Server.