Sql 如何在同一个表中的另一个字段每次更新时更新表中的datetime字段?

Sql 如何在同一个表中的另一个字段每次更新时更新表中的datetime字段?,sql,sql-server,triggers,Sql,Sql Server,Triggers,我有一个名为YearTable的表,有三列:Year、Status和LastUpdateTime。每次有人向年份或状态列添加/更新值时,需要更新LastUpdateTime。我为此编写了一个触发器,但现在每次尝试添加新记录时,都会收到一条错误消息: ErrorSource:.NetSqlClient数据提供程序。 错误消息:无法将值NULL插入“年”列、表“Budget.YearTable”;列不允许空值。插入失败 这是触发因素: CREATE TRIGGER UpdateTrigger ON

我有一个名为YearTable的表,有三列:Year、Status和LastUpdateTime。每次有人向年份或状态列添加/更新值时,需要更新LastUpdateTime。我为此编写了一个触发器,但现在每次尝试添加新记录时,都会收到一条错误消息:

ErrorSource:.NetSqlClient数据提供程序。 错误消息:无法将值NULL插入“年”列、表“Budget.YearTable”;列不允许空值。插入失败

这是触发因素:

CREATE TRIGGER UpdateTrigger
ON  YearTable
AFTER INSERT,DELETE,UPDATE
AS 
BEGIN

insert into tblaudit(LastUpdatedTime)
values(GETDATE())

END
GO
你说:

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

ErrorSource:.NetSqlClient数据提供程序。错误消息:无法将值NULL插入“年”列、表“Budget.YearTable”;列不允许空值。插入失败

由此看来,这是否意味着您的更新和删除工作正常?如果是这样的话,那么听起来就像错误消息所说的那样。在向表中插入数据时,没有为YearTable上的year列提供值

您是否尝试过禁用触发器,并查看在执行相同操作时是否存在该行为

在进一步考虑您的问题之后,我现在假设您的意思是,当更新YearTable中的一行时,YearTable中的同一行的LastUpdated列也会更新。虽然现在我不确定你的信是从哪里来的。或者,当此时没有行可更新时,为什么要创建用于删除的触发器

我假设你桌上的钥匙是年-如果你现在没有钥匙,你可能需要一把

若要处理插入/更新的上次更新,您可以在触发器中使用以下内容,假设年份是您的关键:

UPDATE YearTable
SET LastUpdated = GetDate()
FROM inserted
where YearTable.Year = inserted.year

代码复制不正确:在[dbo].[YearTable]上更改触发器[dbo].[UpdateTrigger]插入后,删除,更新为开始插入YearTableLastUpdateTime valuesGETDATE End触发器是插入YearTable还是tblAudit表?你在问题中列出了一个,在评论中列出了另一个…是的,我注意到,我在评论中修正了它。是的,这是一个错误。我修复了注释部分中的表名。谢谢你的帮助。这解决了我的问题。没问题,您可以在将来编辑该问题以修复该错误:您是否知道如何更新该问题以添加使用windows身份验证进行更新的人的用户名?触发器如何访问此类信息?为了记录用户名,您需要将用户名作为所有更新/插入的一部分传入,据我所知,它不能在触发器中处理