SQL för att avgöra om en enskild bit data körs med nyckel i en uppdatering eller infoga

Sidan uppdaterad :
Datum för skapande av sida :

I en process som Uppdatera om det finns en nyckel eller Infoga om det inte finns någon nyckel utförs vanligtvis ett val baserat på nyckeln, och processen bestäms genom att kontrollera om det finns ett fall. SQL Server 2008 lägger också till en "merge" -instruktion som gör att du kan utföra en uppdatering och en infoga (och sedan ta bort) med en enda instruktion. Detta är dock en jämförelse av två tabeller och är inte lämplig för enskilda data.

Egentligen finns det ett sätt att enkelt uppdatera en rad genom att bestämma Uppdatera och Infoga utan att behöva kontrollera antalet poster med en select-sats.

update [TableName]
set [ColumnName] = @value
--    : 他更新 SQL
where [KeyColumnName] = @value
--    : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
  [ColumnName]
--  : 他更新 SQL
)
values
(
  @value
--  : 他更新値
)

Nyckelordet här är "@@ROWCOUNT". Den @@ROWCOUNT kan hämta antalet rader som den tidigare SQL tillämpades på. Föregående kod kör update-instruktionen först, och om den har uppdaterats returnerar @@ROWCOUNT 1 eller högre, så den kör inte nästa Insert-instruktion. Omvänt, om ingen rad uppdateras i Update-instruktionen, returnerar @@ROWCOUNT 0, så kör Insert by IF-instruktionsbedömningen.

Eftersom ovanstående SQL är en mall ersätter du kolumnnamnen och värdena som ska uppdateras vid lämplig tidpunkt. @value bara är ett variabelnamn, så ersätt detta med det värde du vill uppdatera.