sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL Är det möjligt att göra en uppdatering/infogning med en enda snabb operation

SQL Server 2008 och nyare har en MERGE-sats som gör precis det.

Se MSDN Books Online-dokumenten på MERGE för detaljer.

I grund och botten behöver du fyra saker:

  • en källa (tabell eller vy eller inline SELECT-sats)
  • ett mål
  • a GÅ MED villkor som länkar de två
  • påståenden för fall då det finns en MATCH (rader finns i både källa och mål), INTE MATCHAD (när rad inte finns i målet ännu) och så vidare

Så du definierar i princip något som:

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)

Detta görs som ett påstående och mycket optimerat av SQL Server.




  1. Varför får jag ett ORA-01722 (ogiltigt nummer)?

  2. Hur man skickar ett kolumnnamnsvärde som SQL-argument med hjälp av platshållare

  3. Mysql:PÅ DUBLIKATNYCKELUPPDATERA ALLA VÄRDEN?

  4. MySQL 1443:vad betyder det?