För det första kan du förhindra att en dubblett någonsin förekommer i tabellen genom att använda ett unikt index eller en begränsning. Ett index/begränsning kan fungera samordnat med förslagen nedan. Om du bara använd ett unikt index och inte en av lösningarna nedan, om du infogar en dubblettpost kommer ett fel uppstå och du måste hantera det i andra änden.
Dessutom skulle jag förmodligen infoga data via en lagrad procedur som kontrollerar om raden redan finns. För att göra det kan du använda antingen en SAMMANSLUTNING uttalande, som visas i denna pseudokod:
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 så kan du kontrollera att posterna finns och infoga eller uppdatera manuellt:
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