【问题标题】:How to set the default value of an Access 2003 field using SQL?如何使用 SQL 设置 Access 2003 字段的默认值?
【发布时间】:2009-04-27 02:08:20
【问题描述】:

如何在 MS Access 中使用 SQL 设置字段的默认值?

我试过了,但出现语法错误:

CREATE TABLE HELLO
( MUN INTEGER  NOT NULL,
ADD   CHAR(50) DEFAULT'16 asd ST.'
)

【问题讨论】:

  • 请不要大喊大叫。这不礼貌。

标签: sql database ms-access


【解决方案1】:

ADD 这个词是一个关键字。试试这个:

CREATE TABLE HELLO
( 
    MUN INTEGER  NOT NULL,
    [ADD] CHAR(50) DEFAULT '16 asd ST.'
)

【讨论】:

  • 您的 SQL 是正确的,但必须在 ANSI-92 查询模式下执行。默认/传统的 ANSI-89 查询模式的 SQL DDL 语法不支持 DEFAULT 关键字(也不支持 CHAR,来吧)。
  • 之所以没有这样做是因为 MS 打算使用更丰富的 DAO 接口层来处理这类事情。 Jet 的 DDL 支持一直与更高级别的接口关系不佳。
  • 对于ACE/Jet表的创建/修改,DDL比DAO更丰富。以上面的例子为例:CHAR(50) 列是一个固定宽度的数据类型。 DAO 接口层没有针对这种数据类型进行增强,而 SQL DDL 是。 DAO 甚至无法通过 SQL DDL 创建 CHAR(50) 列! DAO 还缺少许多其他 Jet 4.0 功能:WITH COMPRESSION、CHECK 约束、快速外键等。我想我们都知道,在 Jet 4.0 时代,“MS 旨在用于这种事”。否则他们为什么不能相应地增强 DAO?健忘?!
【解决方案2】:

DEFAULTCHAR 关键字仅在 ACE/Jet 引擎的 ANSI-92 查询模式中受支持(然后仅在 SQL DDL 中)。正如 Jose Basilio 指出的那样,ADD 是一个保留字,必须使用方括号进行转义。此外,DEFAULT 单词和它的子句之间需要一个空格(如 Jose 所示)。

如果您在 MS Access 界面的 Query 对象中执行 SQL,则需要将默认(ANSI-89 查询模式)更改为 ANSI-92 查询模式。请参阅:About ANSI SQL query mode

如果您以编程方式创建表,例如您正在使用 DAO,然后尝试使用 CurrentProject.Connection.Execute“Sql 到这里”,其中 CurrentProject.Connection 是 ADO 经典或其他 OLE DB 连接到您的数据源。

附:当然你希望你的专栏是HELLO.Mum :)

【讨论】:

  • 如果您使用的是 DAO,那么您可以只使用 DAO 来更改您的表,而不是为了运行 DDL 而更改为 ADO。
  • 问题是“使用 SQL...”(使用 DAO 不使用 SQL,IMO)“...在 MS Access 中”,我理解为“使用 MS Access 用户界面”,例如查询对象的 SQL 视图。我同意无需切换技术/方法来创建 DEFAULT,但是根本无法使用 DAO 创建 CHAR(50) 列。
猜你喜欢
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 2022-01-21
  • 1970-01-01
  • 2023-02-24
  • 2012-11-20
相关资源
最近更新 更多