For det første kan du forhindre, at en dublet nogensinde forekommer i tabellen ved at bruge et unikt indeks eller en begrænsning. Et indeks/begrænsning kan fungere sammen med forslagene nedenfor. Hvis du kun brug et unikt indeks og ikke en af nedenstående løsninger, indsættelse af en dublet post vil give en fejl, og du bliver nødt til at håndtere det i den anden ende.
Derudover ville jeg nok indsætte dataene via en lagret procedure, der kontrollerer, om rækken allerede eksisterer. For at gøre det kan du bruge enten en FLETNING sætning, som vist i denne pseudokode:
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,...
eller du kan tjekke, om posterne eksisterer og indsætte eller opdatere manuelt:
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