sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo evitar insertar datos duplicados en una tabla de SQL Server?

En primer lugar, puede evitar que se produzca un duplicado en la tabla mediante el uso de un índice o una restricción únicos. Un índice/restricción puede funcionar en concierto con las sugerencias a continuación. Si solo use un índice único y no una de las soluciones a continuación, insertar un registro duplicado arrojará un error y deberá manejar eso en el otro extremo.

Además, probablemente insertaría los datos a través de un procedimiento almacenado que verifica si la fila ya existe. Para hacer eso, puede usar un MERGE declaración, como se muestra en este 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,...

o bien, puede verificar la existencia de registros e insertar o actualizar 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