【发布时间】:2017-07-18 15:52:00
【问题描述】:
我在 SQL Server 中有这个触发器:
CREATE TRIGGER MyTrigger ON [dbo].[practiseduplicates]
AFTER INSERT
AS
IF EXISTS (SELECT *
FROM [practiseduplicates] t
INNER JOIN inserted i ON i.[money] = t.[money]
AND i.[Name] = t.[Name]
AND i.[year month] = t.[year month])
BEGIN
ROLLBACK
RAISERROR ('Duplicated Data', 16, 1);
END
然后我插入这些值(已经在数据表中):
insert into [practiseduplicates]
values ('2017-02', 'buzzlightyear', '10.09')
当我单击执行时,我预计会弹出错误消息...确实如此,但是当我将值更改为我知道不在数据表中的信息时
例如
'2056-12', 'mr potato head', '12345.09'
还是会弹出错误信息,其实应该是刚刚将数据插入到表中,有谁知道为什么会这样吗?
我怀疑这与我的内部连接语句有关,但我不确定。
【问题讨论】:
-
我希望这是一个关于触发器练习的学习,因为保持重复是唯一约束的工作。
-
与其说是触发练习,不如说是避免重复。所以我猜我现在使用了错误的技术?
-
是的,错误的技术。
标签: sql-server triggers duplicates inner-join rollback