sql >> Databasteknik >  >> RDS >> Sqlserver

Infoga uppdatering lagrad proc på SQL Server

Ditt antagande stämmer, detta är det optimala sättet att göra det och det kallas upsert/merge.

Vikten av UPSERT - från sqlservercentral.com:

För varje uppdatering i fallet som nämns ovan tar vi bort en extra läsning från tabellen om vi använder UPSERT istället för EXISTS. Tyvärr för en Insert använder både UPSERT och IF EXISTS-metoderna samma antal läsningar på tabellen. Därför bör kontrollen av existens endast göras när det finns all giltig anledning att motivera ytterligare I/O. Det optimerade sättet att göra saker på är att se till att du har så lite läsning som möjligt på DB.

Den bästa strategin är att försöka uppdatera. Om inga rader påverkas av uppdateringen, infoga. I de flesta fall kommer raden redan att finnas och endast en I/O kommer att krävas.

Redigera :Kolla in det här svaret och det länkade blogginlägget för att lära dig mer om problemen med det här mönstret och hur du får det att fungera säkert.



  1. Tablespace SYSMGMTDATA är FULL i Grid Infrastructure Management Repository (MGMTDB)

  2. Begäran misslyckades med HTTP-status 401:Obehörig I SSRS

  3. Text-, ntext- och bilddatatyperna kan inte jämföras eller sorteras, förutom när du använder operatorn IS NULL eller LIKE>

  4. Arbetar dina anställda på distans? Så här håller du din data säker.