SQL per determinare se un singolo dato viene eseguito tramite chiave in un aggiornamento o in un inserimento

Pagina aggiornata :
Data di creazione della pagina :

In un processo come Aggiorna se è presente una chiave o Inserisci se non è presente alcuna chiave, in genere viene eseguita una selezione in base alla chiave e il processo viene determinato controllando se esiste un caso. SQL Server 2008 aggiunge inoltre un'istruzione "merge" che consente di eseguire un Update e un Insert (e quindi Delete) con una singola istruzione. Tuttavia, questo è un confronto di due tabelle e non è adatto per singoli dati.

In realtà, esiste un modo per aggiornare facilmente una riga determinando Aggiorna e Inserisci senza dover controllare il numero di record con un'istruzione select.

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

La parola chiave qui è "@@ROWCOUNT". Il @@ROWCOUNT può recuperare il numero di righe a cui è stato applicato l'SQL precedente. Il codice precedente esegue prima l'istruzione Update e, se è stata aggiornata, @@ROWCOUNT restituisce 1 o superiore, quindi non esegue l'istruzione Insert successiva. Al contrario, se nessuna riga viene aggiornata nell'istruzione Update, @@ROWCOUNT restituisce 0, quindi eseguire Insert by IF statement judgment.

Poiché l'SQL precedente è un modello, sostituire i nomi e i valori delle colonne da aggiornare al momento opportuno. @value è solo un nome di variabile, quindi sostituirlo con il valore che si desidera aggiornare.