我有一張表,其中包含兩個not null
列Created
和Updated
。在非空列上插入後觸發
我寫了相應的觸發
ALTER TRIGGER [dbo].[tr_category_inserted] ON [dbo].[Category]
AFTER INSERT
AS
BEGIN
UPDATE Category
SET Created = GETDATE(), Updated = GETDATE()
FROM inserted
WHERE Category.ID = inserted.ID;
END
和
ALTER TRIGGER [dbo].[tr_category_updated] ON [dbo].[Category]
AFTER UPDATE
AS
BEGIN
UPDATE Category
SET Updated = GETDATE()
FROM inserted
inner join [dbo].[Category] c on c.ID = inserted.ID
END
,但如果我插入新行我得到一個錯誤
無法將NULL值插入列「創建',表 'Category';列不允許有空值。 INSERT失敗。
Insert命令:
INSERT INTO [Category]([Name], [ShowInMenu], [Deleted])
VALUES ('category1', 0, 0)
我怎麼能寫這樣的觸發器沒有設置這些列允許空?
如果您想在'insert'上自動更新'date',我建議您使用'default'約束來代替'triggers' – DON
發生錯誤是因爲觸發器僅在插入後工作,您可能不會插入列值插入時創建'和'更新'。 – TechDo
由於觸發器的名稱已經說過,觸發器會觸發** AFTER **插入發生 - 但是您需要爲任何NOT NULL列在INSERT上提供**值**。所以你需要編寫一個'INSTEAD OF INSERT'觸發器來設置這些列的初始值 - 或者更容易:只需在該列上定義一個'DEFAULT(GETDATE())'約束,這樣它就會自動填充到'INSERT '...... –