SQL UPDATE sau INSERT
0Am intampinat pana acuma de cateva ori nevoia de a verifica daca exista un rand in baza de date pentru al updata sau daca nu exista sa inseram un nou rand. Exista multe posibilitati prin care putem obtine efectul dorit, am sa va arat 2 variante in Microsoft Sql Server 2008.
Sql Metoda 1
IF NOT EXISTS(SELECT 1 FROM configuration WHERE [key] = @key) INSERT INTO configuration([key], value) VALUES(@key, @value) ELSE UPDATE configuration SET value = @value WHERE [key] = @key
Pe langa comenzile de INSERT si DELETE putem vedea o a treia si anume SELECT’ul care verifica daca exista un rand cu cheia ‘@key’. Daca nu exista insereaza un nou rand in baza de date, iar daca exista updateaza acel rand. In cazul in care updatam exista o mica problema care devine evidenta odata cu cresterea bazei de date, pentru a verifica daca acel rand exista serveru itereaza prin toate randurile bazei de date iar apoi face din nou iterarea pentru updatarea valorilor.
Sql Metoda 2
UPDATE configuration SET value = @value WHERE [key] = @key IF @@ROWCOUNT = 0 INSERT INTO configuration([key], value) VALUES(@key, @value)
Folosind aceasta metoda problema intampinata anterior este complet evitata, ‘variabila’ @@ROWCOUNT returneaza numarul de randuri returnate afectate de query’ul anterior, astfel daca acesta este 0 (nu s-a gasit nici un rand cu valoarea cheii ‘@key’) atunci va insera un nou rand. Personal recomand aceasta metoda deoarece este cea mai rapida.
Pentru cei care folositi MySQL alternativa @@ROWCOUNT ar fi functia found_rows();
Articol original area72.ro
Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!