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

Trigger zum Verhindern des Einfügens für doppelte Daten von zwei Spalten

Etwa so:

CREATE TRIGGER MyTrigger ON dbo.MyTable
AFTER INSERT
AS

if exists ( select * from table t 
    inner join inserted i on i.name=t.name and i.date=t.date and i.id <> t.id)
begin
    rollback
    RAISERROR ('Duplicate Data', 16, 1);
end
go

Das ist nur zum Einfügen, vielleicht möchten Sie auch Updates in Betracht ziehen.

Aktualisieren

Ein einfacherer Weg wäre, einfach eine eindeutige Einschränkung für die Tabelle zu erstellen, dies wird sie auch für Aktualisierungen erzwingen und die Notwendigkeit eines Triggers beseitigen. Mach einfach:

ALTER TABLE [dbo].[TableName]    
ADD CONSTRAINT [UQ_ID_Name_Date] UNIQUE NONCLUSTERED
(
    [Name], [Date]
)

und dann sind Sie im Geschäft.