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

Hvordan kan jeg forhindre indsættelse af duplikerede data i en SQL Server-tabel?

For det første kan du forhindre, at en dublet nogensinde forekommer i tabellen ved at bruge et unikt indeks eller en begrænsning. Et indeks/begrænsning kan fungere sammen med forslagene nedenfor. Hvis du kun brug et unikt indeks og ikke en af ​​nedenstående løsninger, indsættelse af en dublet post vil give en fejl, og du bliver nødt til at håndtere det i den anden ende.

Derudover ville jeg nok indsætte dataene via en lagret procedure, der kontrollerer, om rækken allerede eksisterer. For at gøre det kan du bruge enten en FLETNING sætning, som vist i denne pseudokode:

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 du kan tjekke, om posterne eksisterer og indsætte eller opdatere manuelt:

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. Import af InnoDB-partitioner i MariaDB 10.0/10.1

  2. Android adgang til ekstern SQL-database

  3. hvordan man indstiller serveroutput ved brug af jdbc-forbindelse i Jmeter

  4. Noget hurtigere end get_headers()