Sql 更新时,更改日期

Sql 更新时,更改日期,sql,sql-server-2005,datetime,insert,Sql,Sql Server 2005,Datetime,Insert,我正在使用SQLServer2005。我想设置一个更新日期的属性(比如默认值,但对于任何更改,而不仅仅是插入)。换言之,在每次更新和插入时,当前日期将放在列中。如何实现这一点?最简单(但不一定是最有效)的方法是使用触发器 看 您可以在插入后使用,更新,也可以使用而不是插入,更新——这两种方法都可以根据您的具体要求来完成工作。假设您有一个表: CREATE TABLE A ( ID INT, Name VARCHAR(20), SomeDate DATE NULL) 您可以创建触发器

我正在使用SQLServer2005。我想设置一个更新日期的属性(比如默认值,但对于任何更改,而不仅仅是插入)。换言之,在每次更新和插入时,当前日期将放在列中。如何实现这一点?

最简单(但不一定是最有效)的方法是使用触发器


您可以在插入后使用
,更新
,也可以使用
而不是插入,更新
——这两种方法都可以根据您的具体要求来完成工作。

假设您有一个
表:

CREATE TABLE A (
  ID INT,
  Name VARCHAR(20),
  SomeDate DATE NULL)
您可以创建触发器:

CREATE TRIGGER INSTEAD_OF_A_INSERT
ON A
INSTEAD OF INSERT AS
BEGIN

INSERT INTO A (ID, Name, SomeDate)
SELECT ID, Name, GETDATE ()
FROM inserted 

END
GO

CREATE TRIGGER INSTEAD_OF_A_UPDATE
ON A
INSTEAD OF UPDATE AS
BEGIN

UPDATE A
SET SomeDate = GETDATE(),
    Name = I.Name
FROM A A1 JOIN INSERTED I ON A1.ID = I.ID

END
GO
这会给你想要的

INSERT INTO A (ID, Name)
VALUES(1, 'John');

INSERT INTO A (ID, Name)
VALUES(2, 'Jack');

UPDATE A
SET Name = 'Jane'

    SELECT *
    FROM A

这是一个你可以玩的游戏。

每行都有一个约会,或者某个地方只有一个约会?你可能正在寻找一个。谢谢。我读了一些关于触发器的书。除了直接更新/插入值之外,这是唯一的方法吗?我正试图找到我的最佳选择,尽管触发器似乎是标准的。如果您想在DB服务器级别执行此操作,这是我知道的唯一方法。@steventnorris如果您可以通过存储过程控制数据访问,如果正确设置权限并控制那些可以绕过过程的人,那么就不一定需要触发器。但是如果你允许特设的DML,那么是的,这就是我要做的方法(当你考虑是否应该允许Ad Hoc DML)。