我有一个名为 YearTable 的表,其中包含三列(年份、状态和上次更新时间)。 每次有人在年份或状态列中添加/更新值时,LastUpdatedTime 都需要更新。 我为此编写了一个触发器,但现在每次我尝试添加新记录时都会收到一条错误消息:
错误源:.NetSqlClient 数据提供程序。 错误消息:无法将 NULL 值插入表“Budget.YearTable”的“Year”列;列不允许为空。 插入失败。
这是触发器:
CREATE TRIGGER UpdateTrigger
ON YearTable
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
insert into tblaudit(LastUpdatedTime)
values(GETDATE())
END
GO
您说:
我为此编写了一个触发器,但现在每次我尝试添加新记录时都会收到一条错误消息:
错误源:.NetSqlClient 数据提供程序。错误消息:无法将 NULL 值插入表“Budget.YearTable”的列“Year”;列不允许为空。插入失败。
由此看来,这是否意味着您的
updates
和 deletes
正在工作? 如果是这种情况,那么听起来就像错误消息所述。 当您在表中执行 insert
操作时,您没有为 year
上的 YearTable
列提供值。
您是否尝试过禁用触发器并查看执行相同操作时是否存在该行为?
进一步考虑您的问题后,我现在假设您的意思是,当
YearTable
中的一行更新时,YearTable
中的同一行的LastUpdated
列也会更新。 虽然现在我不太确定你的tblAudit
来自哪里。 或者为什么当没有行可以更新时,您会为 deletes
创建触发器。
我假设您桌子上的钥匙是
year
- 如果您当前没有钥匙,您可能需要一把。
要处理插入/更新的
LastUpdated
,您可以在触发器中使用以下内容(假设年份是您的关键):
UPDATE YearTable
SET LastUpdated = GetDate()
FROM inserted
where YearTable.Year = inserted.year
更改表 your_table 修改创建日期 DATETIME 默认 CURRENT_TIMESTAMP 更新 CURRENT_TIMESTAMP;