Po pierwsze, możesz zapobiec występowaniu duplikatu w tabeli, używając unikatowego indeksu lub ograniczenia. Indeks/ograniczenie może działać razem z poniższymi sugestiami. Jeśli tylko użyj unikalnego indeksu, a nie jednego z poniższych rozwiązań, wstawienie zduplikowanego rekordu spowoduje błąd i będziesz musiał sobie z tym poradzić po drugiej stronie.
Dodatkowo prawdopodobnie wstawiłbym dane za pomocą procedury składowanej, która sprawdza, czy wiersz już istnieje. Aby to zrobić, możesz użyć MERGE oświadczenie, jak pokazano w tym pseudokodzie:
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,...
lub możesz sprawdzić istnienie rekordów i wstawić lub zaktualizować ręcznie:
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