每次更新同一个表中的另一个字段时,如何更新表中的日期时间字段?

问题描述 投票:0回答:2

我有一个名为 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
sql sql-server triggers
2个回答
0
投票

您说:

我为此编写了一个触发器,但现在每次我尝试添加新记录时都会收到一条错误消息:

错误源:.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

0
投票

更改表 your_table 修改创建日期 DATETIME 默认 CURRENT_TIMESTAMP 更新 CURRENT_TIMESTAMP;

© www.soinside.com 2019 - 2024. All rights reserved.