在任何人建議一個唯一索引或密鑰之前,我有一個很好的例子。爲什麼我的觸發器避免重複的行不起作用?
我用這觸發,從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)
我得到的錯誤:
The transaction ended in the trigger. The batch has been aborted.
附錄:該表看起來是這樣的:
CREATE TABLE [dbo].[bkPersonPoints](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Points] [int] NOT NULL
) ON [APP_BR2_User]
斯科特對這個問題的答案註釋包含的信息的關鍵部分 - 你需要確保在'行插入在表格中**'不匹配*自己*(因爲這是觸發後的''''',插入的行已經在表格中) –