Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Acionador para evitar a inserção de dados duplicados de duas colunas


Algo assim:
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

Isso é apenas para inserção, você pode querer considerar atualizações também.

Atualizar

Uma maneira mais simples seria apenas criar uma restrição exclusiva na tabela, isso também a aplicará para atualizações e removerá a necessidade de um gatilho. Apenas faça:
ALTER TABLE [dbo].[TableName]    
ADD CONSTRAINT [UQ_ID_Name_Date] UNIQUE NONCLUSTERED
(
    [Name], [Date]
)

e então você estará no negócio.