我正在编写许多脚本来更新大量的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;"
答案 0 :(得分:7)
我假设:
CURRENT_TIMESTAMP
(虽然ACE / Jet不直接支持),不要与SQL Server的{{{ 1}}数据类型; 如果使用此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帮助应该为您提供所需的信息。