Za prvé, můžete zabránit tomu, aby se v tabulce někdy vyskytl duplikát, pomocí jedinečného indexu nebo omezení. Index/omezení může fungovat ve shodě s níže uvedenými návrhy. Pokud pouze použijte jedinečný index a ne jedno z níže uvedených řešení, vložení duplicitního záznamu způsobí chybu a budete to muset vyřešit na druhém konci.
Navíc bych pravděpodobně vložil data prostřednictvím uložené procedury, která zkontroluje, zda řádek již existuje. K tomu můžete použít buď SLOUČENÍ prohlášení, jak je znázorněno v tomto pseudokódu:
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,...
nebo můžete zkontrolovat existenci záznamů a vložit nebo aktualizovat ručně:
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