У меня вопрос о производительности SQL Server.
Предположим, что у меня есть таблица persons
со следующими столбцами: id
, name
, surname
.
Теперь я хочу вставить новую строку в эту таблицу. Правило следующее:
-
Если
id
отсутствует в таблице, вставьте строку. -
Если присутствует
id
, обновите.
У меня здесь два решения:
Во-первых:
update persons
set [email protected]_id, [email protected]_name, [email protected]_surname
where [email protected]_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 [email protected]_id, [email protected]_name, [email protected]_surname
where [email protected]_id
else
insert into persons(id, name, surname)
values (@p_id, @p_name, @p_surname)
Что такое лучший подход? Кажется, что во втором варианте, чтобы обновить строку, ее нужно искать два раза, тогда как в первом варианте - только один раз. Есть ли другие решения проблемы? Я использую MS SQL 2000.