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

Attivazione per impedire l'inserimento di dati duplicati di due colonne

Qualcosa del genere:

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

È solo per inserimento, potresti prendere in considerazione anche gli aggiornamenti.

Aggiorna

Un modo più semplice sarebbe semplicemente creare un vincolo univoco sul tavolo, questo lo applicherà anche per gli aggiornamenti ed eliminerà la necessità di un trigger. Basta fare:

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

e poi sarai in affari.