sql >> Base de Datos >  >> RDS >> Sqlserver

Disparador para evitar la inserción de datos duplicados de dos columnas

Algo como esto:

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

Eso es solo para insertar, es posible que también desee considerar actualizaciones.

Actualizar

Una forma más sencilla sería simplemente crear una restricción única en la tabla, esto también la aplicará para las actualizaciones y eliminará la necesidad de un disparador. Solo haz:

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

y entonces estarás en el negocio.