SQL pentru a determina dacă o singură bucată de date este executată de cheie într-o actualizare sau inserare
Î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.