У меня есть вопрос относительно производительности SQL Server.
Предположим, у меня есть таблица persons
со следующими столбцами: id
, name
, surname
.
Теперь я хочу вставить новую строку в эту таблицу. Правило следующее:
Если id
отсутствует в таблице, вставьте строку.
Если присутствует id
, обновить.
У меня есть два решения:
Первый:
update persons
set id=@p_id, name=@p_name, surname=@p_surname
where id=@p_id
if @@ROWCOUNT = 0
insert into persons(id, name, surname)
values (@p_id, @p_name, @p_surname)
Второе:
if exists (select id from persons where id = @p_id)
update persons
set id=@p_id, name=@p_name, surname=@p_surname
where id=@p_id
else
insert into persons(id, name, surname)
values (@p_id, @p_name, @p_surname)
Какой подход лучше? Похоже, что во втором варианте, чтобы обновить строку, ее нужно искать два раза, тогда как в первом варианте - только один раз. Есть ли другие варианты решения проблемы? Я использую MS SQL 2000.