SQL per determinare se un singolo dato viene eseguito tramite chiave in un aggiornamento o in un inserimento
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.