【发布时间】:2015-03-14 20:20:38
【问题描述】:
我创建了一个触发器,该触发器用于阻止表中已存在日期的插入记录。
CREATE TRIGGER [dbo].[SpecialOffers_Insert]
ON [dbo].[SpecialOffers]
FOR INSERT,UPDATE
AS
SET NOCOUNT ON
IF EXISTS (SELECT * FROM inserted WHERE SPO_DateFrom IN (SELECT SPO_DateFrom FROM dbo.SpecialOffers))
BEGIN
RAISERROR('Error. ', 16, 1)
ROLLBACK TRAN
SET NOCOUNT OFF
RETURN
END
SET NOCOUNT OFF
它被添加到一个表中:
CREATE TABLE [dbo].[SpecialOffers](
[SPO_SpoId] [int] IDENTITY(1,1) NOT NULL,
[SPO_DateFrom] [datetime] NOT NULL,
[SPO_DateTo] [datetime] NOT NULL)
表是空的,但是当试图插入这样的记录时:
INSERT INTO dbo.SpecialOffers (SPO_DateFrom, SPO_DateTo) VALUES ('2015-01-15','2015-01-15')
我从触发器中得到错误。应该如何修改触发器才不会报错?
【问题讨论】:
-
您使用的是什么关系型数据库?触发器可以在插入之前(在记录实际添加到表之前)或在插入之后(当记录已经添加到表并且通过 SELECT 对您可见时)运行。
-
为什么不只应用唯一约束?
标签: sql sql-server tsql triggers ddl