【发布时间】:2010-11-01 14:50:00
【问题描述】:
我正在编写许多脚本来更新许多 Access 表。我想为每个字段添加一个名为“date_created”的字段,该字段是创建记录时的时间戳。通过表格视图执行此操作很简单,只需设置 DefaultValue = now()。但是,我将如何在 sql 中完成此操作?
这是我目前对已有该列的表的尝试。此示例使用“tblLogs”。
ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now()
感谢您的帮助!
更新 - 有没有办法在 VBA 中做到这一点?
更新 2 - 在最短和最准确的一天之前测试了所有答案和以下内容
CurrentProject.Connection.Execute _
"ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
【问题讨论】:
-
Now() 是一个愚蠢的函数,如果你想要 DATE 的话。您真正想要的是将默认值设置为 Date()。
-
他们说“日期时间...记录创建时间的时间戳”,NOW() 函数最适合。
-
好吧,将字段名称与输入的数据协调起来会更准确,但称其为“傻”是不礼貌的。建设性反馈不应居高临下,也不应包含任何侮辱。
-
带有 date_ 前缀的列名是否意味着最小的粒度将是一天(换句话说,没有时间元素)是有争议的,例如ACE/Jet 只有一种时间数据类型是 DATETIME,“DATE”是它的同义词。您需要一个约束(或验证规则)来确保 DATETIME 值没有时间元素,例如约束 date_created__no_time_element CHECK(date_created = DATEADD('D', DATEDIFF('D', #1990-01-01 00:00:00#, date_created), #1990-01-01 00:00:00#);跨度>