2009-06-09 79 views
5

我正在写很多脚本来更新许多Access表。我想为每个有一个名为“date_created”的字段添加一个列,该字段是记录创建时的时间戳。通过表视图执行此操作非常简单,只需设置DefaultValue = now()即可。但是,我将如何在sql中完成此操作?Microsoft Access DateTime默认现在通过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;" 
+1

现在(是,如果你想使用一个愚蠢的功能日期。你真正想要的是将默认设置为Date()。 – 2009-06-10 03:50:48

+0

他们说“创建记录时的DateTime ...时间戳”,NOW()函数最适合。 – onedaywhen 2009-06-10 07:20:55

+0

好吧,调整字段名称和输入数据会更加准确,但称它为“愚蠢”是无礼的。建设性的反馈不应该是居高临下,也不应含有任何侮辱。 – JeffO 2009-06-10 14:25:43

回答

6

我假设:

  • 目标数据库是ACE或Jet引擎,而不是SQL服务器;
  • 你想要日期时间,即标准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 /喷气SQL语法ANSI-92查询模式的味道。要通过MS Access接口使用它(例如查询对象的SQL视图),请参见Microsoft Office Access: About ANSI SQL query mode (MDB)。为了以编程方式使用SQL DDL,需要(AFAIK)使用OLE DB,这在VBA中需要使用(AFAIK)ADO。 DAO总是使用ANSI-89查询模式语法,其SQL DDL语法不支持DEFAULT

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

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

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

编辑: 似乎SQL不允许轻松更改默认值。查看this page,其中提供了实际示例 - 您需要更改约束,因为MSSQL将默认值视为约束条件。对错误信息抱歉。

0

在SQL Server中这将是:

ALTER TABLE tblLogs ALTER COLUMN DATE_CREATED DEFAULT GETDATE()

-1

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