sql - Microsoft Access DateTime Default Now 通过 SQL

标签 sql ms-access vba ddl

我正在编写许多脚本来更新许多 Access 表。我想为每个具有名为“date_created”的字段添加一列,该字段是创建记录的时间戳。通过表 View 执行此操作很简单,只需设置 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;"

最佳答案

我假设:

  • 您的目标数据库是 ACE 或 Jet 引擎,而不是 SQL Server;
  • 您想要日期和时间,即所谓的 CURRENT_TIMESTAMP在标准 SQL 中(尽管 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 查询模式风格。要通过 MS Access 界面(例如查询对象的 SQL View )使用它,请参阅 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/Jet),您可以使用一行 VBA (ADO) 代码:
    CurrentProject.Connection.Execute "ALTER TABLE tblLogs ALTER date_created DATETIME DEFAULT NOW() NOT NULL;"
    

    关于sql - Microsoft Access DateTime Default Now 通过 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972273/

    相关文章:

    html - 从使用 Java 脚本进行查询的站点中提取数据

    sql - 使用SQL查询查询完整的Informix数据库版本

    sql - 尝试通过 VBA 更新查询时出现 Access 查询 SQL 类型不匹配错误

    vba - 将 ADO 记录集文本字段排序为数字

    ms-access - 将 Access 97 文本字段的默认值设置为空字符串

    对多列的 SQL DISTINCT 查询

    vba - 如何以编程方式确定 VBA 中选项库的当前设置

    php - PDOexecute($input_parameter) 防止 SQL 注入(inject)作为 bindParam/bindValue?

    sql - 每天自动删除一次 PostgreSQL 表

    mysql - CSV 到 MySQL 的转换和导入