Microsoft Access DateTime默认现在通过SQL

时间:2009-06-09 20:15:56

标签: sql ms-access vba ddl

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

这是我目前对已有列的表的尝试。此示例使用“tblLogs”。

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT now()

感谢您的帮助!

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

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

CurrentProject.Connection.Execute _
    "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"

4 个答案:

答案 0 :(得分:7)

我假设:

  • 您的目标数据库是ACE或Jet引擎,而不是SQL Server;
  • 你想要日期时间,即标准SQL中所谓的CURRENT_TIMESTAMP(虽然ACE / Jet不直接支持),不要与SQL Server的{{{ 1}}数据类型;
  • 您希望使用SQL DDL获得答案。

如果使用此SQL DDL创建表:

TIMESTAMP

然后以下SQL DDL将添加CREATE TABLE tblLogs ( date_created DATETIME NOT NULL ); 您的要求:

DEFAULT

上述ACE / Jet SQL语法是ANSI-92查询模式的风格。要通过MS Access接口使用它(例如Query对象的SQL视图),请参阅Microsoft Office Access: About ANSI SQL query mode (MDB)。要以编程方式使用SQL DDL要求(AFAIK)使用OLE DB,这在VBA中需要(AFAIK)使用ADO。 DAO始终使用ANSI-89查询模式语法,其SQL DDL语法不支持ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;

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

DEFAULT

答案 1 :(得分:2)

而不是now(),你可以使用getdate()。无法检查语法的其他部分(这里没有sql,我很少更改表:)),但应该大致相同。

编辑: 似乎SQL不容易更改默认值。查看this page,其中提供了实际示例 - 您需要更改约束,因为MSSQL将默认值视为约束。对不起错误信息。

答案 2 :(得分:0)

在SQL Server中它将是:

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT getDate()

答案 3 :(得分:-1)

我建议创建或重构Jet表,使用DAO而不是DDL。它提供了控制Jet实现DDL所缺乏的属性的能力。 Access帮助应该为您提供所需的信息。