表列中的datetime数据类型会自动更新当前时间吗?

时间:2010-11-12 09:41:45

标签: sql sql-server sql-server-2005 tsql

表列中的datetime数据类型(last_modified_timestamp)会自动更新当前时间吗?

我有一个如下所示的表格列,我需要知道它是否会自动在列中插入当前时间?

我目前如何知道我的表格中有默认设置?

我将其更改为插入...而不是更新!

alt text

5 个答案:

答案 0 :(得分:1)

不,它不会。您希望SQL如何猜测哪些日期时间列应该像这样自动更新,而其他列则要记录,例如:历史性的约会。

出于INSERT目的,您可以在插入当前日期的列上设置DEFAULT约束(Getdate()/ CURRENT_TIMESTAMP)。

但是要使UPDATE工作,你必须实现一个触发器。


对于INSERT目的,并使用表设计器,您可以查看“默认值或绑定”属性 - 您将其设置为(CURRENT_TIMESTAMP)(GetDate())(它们的含义相同) 。或者在对象资源管理器中,您可以查看表中的约束 - 如果有默认设置,它将显示在那里。


另外,值得指出的是,默认情况与听起来完全一样 - 没有什么可以阻止某人为此列提供自己的价值。如果你想阻止它,那么触发器可能就是答案(虽然很多人不喜欢触发器)。

答案 1 :(得分:0)

,它不会。

您需要指定default之类的

DECLARE @Table TABLE(
        ID INT,
        LastDate DATETIME DEFAULT GETDATE()
)

INSERT INTO @Table (ID) SELECT 1

SELECT  *
FROM    @Table

或者使用triggers,或使用INSERT/UPDATES

中的GETDATE()手动更新值

答案 2 :(得分:0)

绝对不是。

您可以使用DEFAULT为getdate(),这将为您的列添加当前日期时间

如果在列上设置了default,则可以在表约束中看到。签入表属性,或键入sp_help <tablename>

答案 3 :(得分:0)

如果使用DEFAULT getdate(),则必须禁用该列的空值,如果发送了null,则sql将设置默认值。

答案 4 :(得分:0)

听起来你可能需要一个触发器来更新更新日期。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      David Forck
-- Create date: 12Nov10
-- Description: Update last modified date
-- =============================================
CREATE TRIGGER dbo.UpdateLastModified
   ON  dbo.table1
   AFTER update
AS 
BEGIN


    SET NOCOUNT ON;

update dbo.table1
set last_modified_timestap=getdate()
where ID in (select ID from inserted)



END
GO