Microsoft Access DateTime默认现在通过SQL

Kev*_*amb 7 sql ddl ms-access vba

我正在编写一些脚本来更新大量的Access表.我想为每个都添加一个列,该列有一个名为"date_created"的字段,该字段是创建记录时的时间戳.通过表视图执行此操作非常简单,只需设置DefaultValue = now()即可.但是,我如何在sql中完成此操作?

这是我目前对已有列的表的尝试.此示例使用"tblLogs".

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now()
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

更新 - 有没有办法在VBA中执行此操作?

更新2 - 测试所有答案和以下onedaywhen是最短和最准确的

CurrentProject.Connection.Execute _
    "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
Run Code Online (Sandbox Code Playgroud)

one*_*hen 7

我假设:

  • 您的目标数据库是ACE或Jet引擎,而不是SQL Server;
  • 你想要日期时间,即CURRENT_TIMESTAMP标准SQL中的所谓(不过ACE/Jet不直接支持),不要与SQL Server的TIMESTAMP数据类型混淆;
  • 你想要一个使用SQL DDL的答案.

如果您使用此SQL DDL创建了表:

CREATE TABLE tblLogs 
(
   date_created DATETIME NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

然后以下SQL DDL将添加DEFAULT您的要求:

ALTER TABLE tblLogs ALTER 
   date_created DATETIME DEFAULT NOW() NOT NULL;
Run Code Online (Sandbox Code Playgroud)

上面的ACE/Jet SQL语法是ANSI-92查询模式的味道.要通过MS Access接口使用它(例如,Query对象的SQL视图),请参阅Microsoft Office Access:关于ANSI SQL查询模式(MDB).要以编程方式使用SQL DDL要求(AFAIK)使用OLE DB,这在VBA中需要(AFAIK)使用ADO.DAO始终使用ANSI-89查询模式语法,其SQL DDL语法缺乏支持DEFAULT.

如果您使用的是Access(而不是ACE/Jet独立版),则可以使用单行VBA(ADO)代码:

CurrentProject.Connection.Execute "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
Run Code Online (Sandbox Code Playgroud)