Първо, можете да предотвратите възникването на дубликат в таблицата, като използвате уникален индекс или ограничение. Индекс/ограничение може да работи съгласувано с предложенията по-долу. Ако само използвайте уникален индекс, а не едно от решенията по-долу, вмъкването на дублиран запис ще изведе грешка и ще трябва да се справите с това от другата страна.
Освен това вероятно бих вмъкнал данните чрез съхранена процедура, която проверява дали редът вече съществува. За да направите това, можете да използвате или ОБЕДИВАНЕ израз, както е показано в този псевдокод:
create procedure MyProcedure
(
@Name nvarchar(100),
...
)
as
merge MyTable
using
(
select @Name,...
) as source (Name, ...)
on MyTable.Name = source.Name
when not matched then
insert (Name,...) values (source.Name,...)
when matched then
update set Name = @Name,...
или можете да проверите за съществуването на записите и да вмъкнете или актуализирате ръчно:
create procedure MyProcedure
(
@Name nvarchar(100),
...
)
as
if not exists (select * from MyTable where Name = @Name)
begin
insert into MyTable (Name,...) values (@Name,...)
end
else
begin
update MyTable
set ...
where Name = @Name
end