Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je empêcher l'insertion de données en double dans une table SQL Server ?

Tout d'abord, vous pouvez empêcher qu'un doublon ne se produise dans la table en utilisant un index unique ou une contrainte. Un index/contrainte peut fonctionner de concert avec les propositions ci-dessous. Si vous seulement utilisez un index unique et non l'une des solutions ci-dessous, l'insertion d'un enregistrement en double générera une erreur et vous devrez gérer cela à l'autre bout.

De plus, j'insérerais probablement les données via une procédure stockée qui vérifie si la ligne existe déjà. Pour ce faire, vous pouvez utiliser soit un MERGE déclaration, comme indiqué dans ce 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,...

ou, vous pouvez vérifier l'existence des enregistrements et les insérer ou les mettre à jour manuellement :

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