Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich verhindern, dass doppelte Daten in eine SQL Server-Tabelle eingefügt werden?

Erstens können Sie verhindern, dass jemals ein Duplikat in der Tabelle auftritt, indem Sie einen eindeutigen Index oder eine eindeutige Einschränkung verwenden. Ein Index/eine Einschränkung kann zusammenwirken mit den unten stehenden Vorschlägen. Wenn Sie nur Verwenden Sie einen eindeutigen Index und keine der folgenden Lösungen. Das Einfügen eines doppelten Datensatzes wird einen Fehler auslösen und Sie müssen dies am anderen Ende behandeln.

Außerdem würde ich die Daten wahrscheinlich über eine gespeicherte Prozedur einfügen, die überprüft, ob die Zeile bereits vorhanden ist. Dazu können Sie entweder ein MERGE verwenden Anweisung, wie in diesem Pseudocode gezeigt:

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

oder Sie könnten prüfen, ob Datensätze vorhanden sind, und sie manuell einfügen oder aktualisieren:

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