У меня есть тест таблицы с идентификатором столбцов, который первичный ключ и автоматически увеличивается и имя. Я хочу вставить новую запись, если и только если нет записей. Например,
ввод id = 30122 и имя = Джон
если есть записи с идентификатором 30122, я обновляю столбец имени до john, если нет записей, я вставляю новую запись.
Я могу сделать, используя 2 запроса, как
select * from test where id=30122
если у него есть какие-то записи, то я могу использовать update test set name='john' where id=3012
или если у него нет записей, то я могу использовать
insert into test(name) values('john')
Но я хотел использовать один запрос?
Может кто-нибудь сказать, если это возможно?
sql-server
merge
upsert
SpringLearner
источник
источник
But I wanted to use single query?
Зачем?MERGE
ни в одной версии, даже в SQL Server 2019. Некоторые предыстории этого здесь .Ответы:
Вы можете попробовать это
Другой подход для повышения производительности
а также читать эту вредную привычку, чтобы пнуть на префиксе схемы
источник
Предполагая SQL Server 2008 или более позднюю версию, вы можете использовать
MERGE
:Стол
запрос
SERIALIZABLE
Подсказка необходима для правильной работы под высоким параллелизмом .Вы можете найти сравнения распространенных методов Майкла Дж. Сварта здесь:
Mythbusting: одновременное обновление / вставка решений
источник