我不知道是否有可能创建一个每次创建或更新记录时都有创建日期和更新日期的表。创建一个具有创建日期和更新日期的表(只读)
例如,当我向该表中插入一条记录时,创建的日期将在与更新日期相同的表中自动生成。
当我修改此记录时,创建日期不会更改,但更新日期将根据日期更改。
非常感谢
我不知道是否有可能创建一个每次创建或更新记录时都有创建日期和更新日期的表。创建一个具有创建日期和更新日期的表(只读)
例如,当我向该表中插入一条记录时,创建的日期将在与更新日期相同的表中自动生成。
当我修改此记录时,创建日期不会更改,但更新日期将根据日期更改。
非常感谢
CREATE TABLE dbo.foo
(
ID INT IDENTITY(1,1),
CreatedDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UpdatedDate DATETIME NULL
);
GO
CREATE TRIGGER dbo.foo_ForUpdate
ON dbo.foo
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE f SET UpdatedDate = CURRENT_TIMESTAMP
FROM dbo.foo AS f
INNER JOIN inserted AS i
ON f.ID = i.ID;
END
GO
您可以设置默认值的列等于GETDATE(),这将创建日期设置为时间创建记录。这对于UpdatedDate不起作用,因为创建记录时将使用默认值。对于此列,您可以在更新触发后使用。下面是说明如何创建一个链接: http://www.sqlservercurry.com/2010/09/after-update-trigger-in-sql-server.html
触发是最合适的选择。您可以按照以下步骤参照触发样本。
CREATE TRIGGER dbo.TableTriggerName
ON dbo.TableName
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON;
--
-- Check if this is an INSERT, UPDATE or DELETE Action.
-- Set Action to Insert by default.
IF EXISTS(SELECT * FROM DELETED)
BEGIN
END
ELSE
IF NOT EXISTS(SELECT * FROM INSERTED) RETURN; -- Nothing updated or inserted.
...
END
这显示了触发器的骨架是什么样的,但它忽略了实际的问题。显示如何更新受更新影响的行的基表中的值的逻辑在哪里? –
触发器应当予以受理。 –
最合适的选项是数据库中的触发器。 – Smaug