我已經創建了一個觸發器,用於阻止表中已存在日期的插入記錄。假設容易觸發
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')
我從觸發錯誤。我應該如何修改觸發器來避免錯誤?
?觸發器可以運行BEFORE插入(在記錄實際添加到表之前)或AFTER插入(當記錄已經添加到表並且由SELECT可見時)。 – Dmitry
爲什麼不僅僅應用一個唯一的約束? –