Mam test tabeli mający kolumny id, który klucz podstawowy i auto inkrementowane i nazwa. Chcę wstawić nowy rekord, a jeśli tylko nie ma żadnych rekordów, na przykład
dane wejściowe to id = 30122, a name = John
jeśli istnieją rekordy o identyfikatorze 30122, zaktualizowałem kolumnę z nazwiskiem do Johna, jeśli nie ma żadnych rekordów, wstawiłem nowy rekord.
Mogę zrobić używając 2 zapytań takich jak
select * from test where id=30122
jeśli ma jakieś rekordy, mogę użyć update test set name='john' where id=3012
lub jeśli nie ma zapisów, mogę użyć
insert into test(name) values('john')
Ale chciałem użyć pojedynczego zapytania?
Czy ktoś może powiedzieć, czy to możliwe?
sql-server
merge
upsert
SpringLearner
źródło
źródło
But I wanted to use single query?
Czemu?MERGE
żadnej wersji, nawet SQL Server 2019. Trochę o tym tutaj .Odpowiedzi:
Możesz tego spróbować
Inne podejście do lepszej wydajności to
a także przeczytaj te złe nawyki, aby uruchomić prefiks schematu
źródło
Zakładając SQL Server 2008 lub nowszy, możesz użyć
MERGE
:Stół
Pytanie
SERIALIZABLE
Wskazówka jest wymagany do poprawnej pracy pod wysokim współbieżności .Porównanie popularnych metod autorstwa Michaela J. Swarta można znaleźć tutaj:
Mythbusting: Jednoczesna aktualizacja / wstawianie rozwiązań
źródło