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

时间:2015-02-26 20:30:47

标签: sql sql-server triggers

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

ErrorSource:.NetSqlClient数据提供程序。 错误消息:无法将值NULL插入Column' Year',table' Budget.YearTable&#39 ;;列不允许空值。插入失败。

这是触发器:

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

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

END
GO

1 个答案:

答案 0 :(得分:0)

你说:

  

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

     

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

从这一点来看,这是否意味着您的updatesdeletes正在运作?如果是这种情况,那么听起来就像错误消息一样。当您在表格中insert进行操作时,您没有为year上的YearTable列提供值。

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

在进一步考虑您的问题之后,我现在 假设 您的意思是当YearTable中的行更新时,该行YearTable中的LastUpdated列已更新。虽然现在我不确定tblAudit来自哪里。或者,为什么在此时没有要更新的行时,会为deletes创建触发器。

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

要处理插入/更新的LastUpdated,您可以在触发器中使用以下内容(假设年份是您的密钥):

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