admin

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

sql

我正在工作SQL Server 2008R2,我有下表

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

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

 ID    Name     date
  4    ABC      2011

请指导我如何编写此触发器。


阅读 165

收藏
2021-05-10

共1个答案

admin

像这样的东西:

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

那只是为了插入,您可能也想考虑更新。

更新

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

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

然后你就可以做生意。

2021-05-10