Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso evitar a inserção de dados duplicados em uma tabela do SQL Server?


Primeiro, você pode impedir que uma duplicata ocorra na tabela usando um índice ou restrição exclusivo. Um índice/restrição pode funcionar em conjunto com as sugestões abaixo. Se você somente use um índice exclusivo e não uma das soluções abaixo, inserir um registro duplicado gerará um erro e você precisará lidar com isso na outra extremidade.

Além disso, eu provavelmente inseriria os dados por meio de um procedimento armazenado que verifica se a linha já existe. Para fazer isso, você pode usar um MERGE instrução, conforme mostrado neste pseudocódigo:
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,...

ou, você pode verificar a existência de registros e inserir ou atualizar 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