【发布时间】:2017-10-04 00:59:37
【问题描述】:
在有人建议唯一索引或键之前,我有一个很好的例子。
我正在使用这个触发器,来自Trigger to prevent Insertion for duplicate data of two columns:
CREATE TRIGGER LogDuplicates ON bkPersonPoints
FOR INSERT
AS
if exists (select * from bkPersonPoints c
inner join inserted i
on c.Name = i.Name and c.Points = i.Points)
begin
rollback
end
GO
这个答案被接受并且有 15 票赞成,所以我希望它能够工作,但即使在我第一次插入空表时:
insert bkPersonPoints (Name, Points) values ('Brady', 100)
我得到错误:
事务在触发器中结束。该批次已中止。
附录:表格如下所示:
CREATE TABLE [dbo].[bkPersonPoints](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Points] [int] NOT NULL
) ON [APP_BR2_User]
【问题讨论】:
-
Scott 对该答案的评论包含一条关键信息 - 您需要确保
inserted中的行 不 匹配 它们自己在表中(由于这是for/after触发器,插入的行已经在表中)
标签: sql sql-server tsql triggers sql-server-2012