sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik voorkomen dat dubbele gegevens in een SQL Server-tabel worden ingevoegd?

Ten eerste kunt u voorkomen dat er ooit een duplicaat in de tabel voorkomt door een unieke index of beperking te gebruiken. Een index/beperking kan in overleg werken met onderstaande suggesties. Als je alleen gebruik een unieke index en niet een van de onderstaande oplossingen, het invoegen van een duplicaat zal een fout veroorzaken en u zult dat aan de andere kant moeten afhandelen.

Bovendien zou ik de gegevens waarschijnlijk invoegen via een opgeslagen procedure die controleert of de rij al bestaat. Om dat te doen, kunt u een MERGE . gebruiken verklaring, zoals weergegeven in deze pseudo-code:

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

of u kunt controleren of de records bestaan ​​en handmatig invoegen of bijwerken:

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. Opgeslagen procedure:geef XML door als argument en INSERT (sleutel/waarde-paren)

  2. PostgreSQL-afstemming:belangrijke dingen om de prestaties te verbeteren

  3. hoe MySQL-rechten alleen aan een specifieke rij toe te kennen

  4. PostgreSQL-query met gegenereerde kolommen