首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于DateCreated和DateModified列的问题- SQL Server

关于DateCreated和DateModified列的问题- SQL Server
EN

Stack Overflow用户
提问于 2010-04-10 03:39:45
回答 7查看 9.1K关注 0票数 5
代码语言:javascript
复制
CREATE TABLE Customer
(
        customerID         int identity (500,20) CONSTRAINT 
        .
        .
        dateCreated    datetime DEFAULT GetDate() NOT NULL,
        dateModified   datetime DEFAULT GetDate() NOT NULL
);

当我插入一条记录时,dateCreated和dateModified被设置为默认日期/时间。当我更新/修改记录时,dateModified和dateCreated保持不变?我该怎么办?

显然,我需要dateCreated值以保持第一次插入的值,并且当记录字段中发生更改/修改时,dateModified保持变化。

换句话说,你能写一个简单的快速触发器吗?我还不是很了解。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-04-10 03:43:29

您可能希望创建update触发器来为您更新此值

看一下类似这样的东西

代码语言:javascript
复制
CREATE TABLE Vals(
        ID INT,
        Val VARCHAR(10),
        DateCreated DATETIME DEFAULT GetDate(),
        DateUpdated DATETIME DEFAULT GetDate()
)
GO

CREATE TRIGGER Upd ON Vals
AFTER UPDATE
AS 
UPDATE Vals
SET     DateUpdated = GetDate()
FROM    Vals INNER JOIN
        inserted ON Vals.ID = inserted.ID
Go

INSERT INTO Vals (ID, Val) SELECT 1, 'A'
SELECT *
FROM    Vals
GO

UPDATE Vals SET Val = 'B'
SELECT *
FROM    Vals
GO

DROP TABLE Vals
GO
票数 10
EN

Stack Overflow用户

发布于 2010-04-10 03:43:53

代码语言:javascript
复制
UPDATE
    Customer
SET
    ... = NewValue,
    dateModified = DEFAULT
WHERE
    ...

我会使用它而不是dateModified = GETDATE(),所以GETDATE()只被使用一次(假设你想在将来改成GETUTCDATE() )

或者触发器,如果你有多个更新路径...?

票数 5
EN

Stack Overflow用户

发布于 2010-04-10 04:20:28

当我插入一条记录时,dateCreated和dateModified被设置为默认日期/时间。当我更新/修改记录时,dateModified和dateCreated保持不变?我该怎么办?

列默认值仅在INSERT时使用,而不是由UPDATE使用。如果您不在INSERT中提供列或发出DEFAULT关键字,INSERT命令将使用默认值。

代码语言:javascript
复制
INSERT INTO Customer (col1, col2) 
VALUES (..,..)  ---get default for dateCreated & dateModified   

INSERT INTO Customer (col1, col2,dateCreated) 
VALUES (..,..,DEFAULT)  ---get default for dateCreated & dateModified   

INSERT INTO Customer (col1, col2,dateCreated,dateModified) 
VALUES (..,..,DEFAULT,DEFAULT)  ---get default for dateCreated & dateModified   

INSERT INTO Customer (col1, col2,dateCreated,dateModified) 
VALUES (..,..,'1/1/2010',DEFAULT)  ---only get default for dateModified   

INSERT INTO Customer (col1, col2,dateCreated,) 
VALUES (..,..,'1/1/2010')  ---only get default for dateModified   

INSERT INTO Customer (col1, col2,dateCreated,dateModified)
VALUES (..,..,'1/1/2010','1/2/2010')  ---no defaults for dateCreated & dateModifie

我喜欢使用位于程序顶部的局部变量集:

代码语言:javascript
复制
DECLARE @RunDate datetime
SET @RunDate=GETDATE()

然后我在过程中使用它,因此所有更改(即使在多个表上)都具有精确到毫秒的相同日期。我还希望dateModified列允许空值并且没有默认值,当它被插入时,它是被创建的而不是被修改的,当它被实际修改时,我将设置dateModified。

然后使用:

代码语言:javascript
复制
UPDATE Customer
    SET importantColumn=
       ,dateModified = @RunDate
    WHERE ...

UPDATE CustomerPrice
    SET importantColumn=
       ,dateModified = @RunDate
    WHERE ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2610370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档