SQL om te bepalen of een enkel stuk gegevens wordt uitgevoerd met een sleutel in een update of invoegen

Pagina bijgewerkt :
Aanmaakdatum van pagina :

In een proces zoals Bijwerken als er een sleutel is of Invoegen als er geen sleutel is, wordt meestal een selectie uitgevoerd op basis van de sleutel en wordt het proces bepaald door te controleren of er één hoofdletter is. SQL Server 2008 voegt ook een 'merge'-instructie toe waarmee u een update en een insert (en vervolgens Delete) kunt uitvoeren met één instructie. Dit is echter een vergelijking van twee tabellen en is niet geschikt voor afzonderlijke gegevens.

Eigenlijk is er een manier om eenvoudig een rij bij te werken door Update en Insert te bepalen zonder het aantal records met een select-instructie te hoeven controleren.

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

Het sleutelwoord hier is "@@ROWCOUNT". De @@ROWCOUNT kan het aantal rijen ophalen waarop de vorige SQL is toegepast. De voorgaande code voert eerst de instructie Update uit en als deze is bijgewerkt, retourneert @@ROWCOUNT 1 of hoger, zodat de volgende instructie Invoegen niet wordt uitgevoerd. Als daarentegen geen rij wordt bijgewerkt in de instructie Update, retourneert @@ROWCOUNT 0, dus voer Invoegen uit volgens IF-instructieoordeel.

Aangezien de bovenstaande SQL een sjabloon is, vervangt u de kolomnamen en waarden die op het juiste moment moeten worden bijgewerkt. @value is slechts een variabelenaam, dus vervang deze door de waarde die u wilt bijwerken.