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

Déclencheur pour empêcher l'insertion de données en double de deux colonnes

Quelque chose comme ça :

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

C'est juste pour l'insertion, vous voudrez peut-être aussi envisager des mises à jour.

Mettre à jour

Un moyen plus simple serait de simplement créer une contrainte unique sur la table, cela l'appliquera également pour les mises à jour et supprimera le besoin d'un déclencheur. Faites simplement :

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

et alors vous serez en affaires.