Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come posso impedire l'inserimento di dati duplicati in una tabella di SQL Server?

Innanzitutto, puoi impedire che un duplicato si verifichi nella tabella utilizzando un indice o un vincolo univoci. Un indice/vincolo può funzionare di concerto con i suggerimenti di seguito. Se solo usa un indice univoco e non una delle soluzioni seguenti, l'inserimento di un record duplicato genererà un errore e dovrai gestirlo dall'altra parte.

Inoltre, probabilmente inserirei i dati tramite una stored procedure che verifica se la riga esiste già. Per farlo, puoi utilizzare un MERGE istruzione, come mostrato in questo pseudo codice:

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,...

oppure, puoi verificare l'esistenza dei record e inserirli o aggiornarli manualmente:

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