sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag förhindra att dubbletter av data infogas i en SQL Server-tabell?

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


  1. Släpp icke namngiven främmande nyckel i MySql

  2. Äntligen installerade MySQL for Rails i Windows 64 bit, och nu

  3. Anslutning misslyckades:Åtkomst nekad för användaren 'root'@'localhost' (med lösenord:JA) från php-funktionen

  4. Få kortdagsnamnet i PostgreSQL