Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL Est-il possible de faire une mise à jour / insertion avec une seule opération rapide

SQL Server 2008 et les versions ultérieures ont une instruction MERGE qui fait exactement cela.

Consultez la documentation MSDN Books Online sur MERGE pour plus de détails.

Fondamentalement, vous avez besoin de quatre éléments :

  • une source (table ou vue ou instruction SELECT en ligne)
  • une cible
  • une JOINTURE condition qui relie les deux
  • instructions pour les cas où il y a un MATCH (les lignes existent à la fois dans la source et la cible), NOT MATCHED (lorsque la ligne n'existe pas encore dans la cible) et ainsi de suite

Donc, vous définissez essentiellement quelque chose comme :

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)

Ceci est fait en une seule instruction et hautement optimisé par SQL Server.