我有一张表,其中包含两个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 '...... –