7

我正在编写许多脚本来更新许多 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

4 回答 4

8

我假设:

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

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

CREATE TABLE tblLogs 
(
   date_created DATETIME NOT NULL
);

那么以下 SQL DDL 将添加DEFAULT您的要求:

ALTER TABLE tblLogs ALTER 
   date_created DATETIME DEFAULT NOW() NOT NULL;

上面的 ACE/Jet SQL 语法是 ANSI-92 Query Mode 风格的。要通过 MS Access 接口(例如查询对象的 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;"
于 2009-06-10T07:33:50.670 回答
2

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

编辑:似乎 SQL 不允许如此轻易地更改默认值。查看此页面,其中提供了实际示例 - 您需要更改约束,因为 MSSQL 将默认值视为约束。对不起,错误信息。

于 2009-06-09T20:19:37.553 回答
0

在 SQL Server 中,它将是:

ALTER TABLE tblLogs ALTER COLUMN date_created DEFAULT getDate()

于 2009-06-09T20:21:28.300 回答
-1

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

于 2009-06-10T03:52:26.340 回答