SQL pentru a determina dacă o singură bucată de date este executată de cheie într-o actualizare sau inserare

Pagina actualizată :
Data creării paginii :

Într-un proces, cum ar fi Actualizare dacă există o cheie sau Inserare dacă nu există nicio cheie, o selectare se efectuează de obicei pe baza cheii, iar procesul este determinat prin verificarea dacă există un caz. SQL Server 2008 adaugă, de asemenea, o instrucțiune "îmbinare" care vă permite să efectuați o actualizare și o inserare (și apoi ștergeți) cu o singură instrucțiune. Cu toate acestea, aceasta este o comparație a două tabele și nu este potrivită pentru date unice.

De fapt, există o modalitate de a actualiza cu ușurință un rând determinând Actualizare și Inserare fără a fi nevoie să verificați numărul de înregistrări cu o instrucțiune de selectare.

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

Cuvântul cheie aici este "@@ROWCOUNT". @@ROWCOUNT poate regăsi numărul de rânduri la care s-a aplicat SQL-ul anterior. Codul precedent execută mai întâi instrucțiunea Actualizare și, dacă a fost actualizată, @@ROWCOUNT returnează 1 sau mai mare, astfel încât să nu execute următoarea instrucțiune Inserare. În schimb, dacă niciun rând nu este actualizat în instrucțiunea Actualizare, @@ROWCOUNT returnează 0, deci executați Inserare după hotărârea de declarație IF.

Deoarece SQL-ul de mai sus este un șablon, înlocuiți numele coloanelor și valorile care urmează să fie actualizate la momentul corespunzător. @value este doar un nume de variabilă, așa că înlocuiți acest lucru cu valoarea pe care doriți să o actualizați.