防止插入两列重复数据的触发器

问题描述:

我正在研究 SQL Server 2008R2,我有下表

I am working on SQL Server 2008R2, I am having the following Table

ID     Name     date
 1     XYZ      2010
 2     ABC      2011
 3     VBL      2010

现在我想阻止插入,如果我有数据,尽管 ID 不同但数据存在

Now i want to prevent insertion if i have a Data although the ID is different but data is present

 ID    Name     date
  4    ABC      2011

请指导我如何编写这个触发器.

Kindly guide me how should i write this trigger.

是这样的:

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

这只是用于插入,您可能也需要考虑更新.

That's just for insert, you might want to consider updates too.

更新

一种更简单的方法是在表上创建一个唯一约束,这也将强制执行它进行更新并消除对触发器的需要.就这样做:

A simpler way would be to just create a unique constraint on the table, this will also enforce it for updates too and remove the need for a trigger. Just do:

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

然后你就可以做生意了.

and then you'll be in business.