【问题标题】:MONTH NUMBER (MONTH BETWEEN 1AND 12),月数(1 和 12 之间的月份),
【发布时间】:2015-01-02 14:50:45
【问题描述】:

我正在尝试使用 SQL 在 Access 中创建一个表:

CREATE TABLE STATS
(ID NUMBER  REFERENCES STATION(ID),
MONTH NUMBER (MONTH BETWEEN 1AND 12),
TEMP_F NUMBER (TEMP_F BETWEEN -80 AND 150),
RAIN_I NUMBER (RAIN_I BETWEEN 0 AND 100),
PRIMARY KEY (ID, MONTH));

每次我运行查询时,它都会给我“Syntax error in CREATE TABLE statement”。我尝试了一些故障排除,但没有成功。

【问题讨论】:

  • 您确定可以这样使用 BETWEEN 吗? (我实际上并不知道记录)。如果可以,那么"1AND" 之间的空格可能是个问题
  • 使用查询设计窗口创建sql。您似乎缺少很多逗号或方括号,或者您不了解函数。
  • 谢谢。没有空间不是问题。虽然感谢您纠正错误。我把空间,但没有运气

标签: sql ms-access ms-access-2007


【解决方案1】:

此语句创建一个包含 3 个字段的表:

CREATE TABLE STATS (
    ID LONG REFERENCES STATION(ID),
    [MONTH] SHORT,
    TEMP_F DOUBLE,
    CONSTRAINT pkey PRIMARY KEY (ID, [MONTH]),
    CONSTRAINT valid_month CHECK ([MONTH] BETWEEN 1 AND 12),
    CONSTRAINT valid_TEMP_F CHECK (TEMP_F BETWEEN -80 AND 150)
    );

注意事项:

  1. 我的STATION 表中的ID 字段是AutoNumber 数据类型,所以我为STATS.ID 的数据类型选择了长整数。
  2. MONTH 是 reserved word。我将该名称括在方括号中,因此 Access 不会将其误认为是 Month() 函数。但最好选择一个非保留字的字段名。
  3. 我使用CHECK 约束来限制[MONTH] 和TEMP_F 将接受的值。但这意味着该语句必须从 ADO 执行,因为从 DAO 执行的 Access DDL 语句不支持CHECK 约束。 (请注意,查询设计器运行的查询使用 DAO。)我使用字符串变量来保存语句,然后像这样从 CurrentProject.Connection(这是一个 ADO 对象)执行它...
Dim strCreate As String
strCreate = "CREATE TABLE STATS (" & vbCrLf & _
    "ID LONG REFERENCES STATION(ID)," & vbCrLf & _
    "[MONTH] SHORT," & vbCrLf & _
    "TEMP_F DOUBLE," & vbCrLf & _
    "CONSTRAINT pkey PRIMARY KEY (ID, [MONTH])," & vbCrLf & _
    "CONSTRAINT valid_month CHECK ([MONTH] BETWEEN 1 AND 12)," & vbCrLf & _
    "CONSTRAINT valid_TEMP_F CHECK (TEMP_F BETWEEN -80 AND 150)" & vbCrLf & _
    ");"
Debug.Print strCreate
CurrentProject.Connection.Execute strCreate

您可以通过包含 RAIN_I 字段并为其添加 CHECK 约束来扩展此示例。

【讨论】:

  • 我将 MONTH 括在方括号中:CREATE TABLE STATS(ID LONG REFERENCES STATION(ID), [MONTH] SHORT ([MONTH] BETWEEN 1 and 12), TEMP_F DECIMAL (TEMP_F BETWEEN -80 and 150 ), RAIN_I DECIMAL (RAIN_I BETWEEN 0 and 100), PRIMARY KEY (ID, [MONTH]));仍然得到同样的错误。我不能不使用 CONSTRAINT 键。
  • 甚至 CREATE TABLE STATS (ID LONG REFERENCES STATION(ID), [MONTH] SHORT, CONSTRAINT pkey PRIMARY KEY (ID, [MONTH]), CONSTRAINT valid_month CHECK ([MONTH] BETWEEN 1 and 12) TEMP_F NUMBER, CONSTRAINT valid_temp_f CHECK (TEMP_F BETWEEN -80 AND 150) RAIN_I NUMBER, CONSTRAINT valid_rain_i CHECK (RAIN_I BETWEEN 0 AND 100) );不起作用。约束子句中的语法错误。
  • 该语句在TEMP_F NUMBER 之前没有逗号。另外,我建议您在添加 CONSTRAINT 子句之前定义所有字段......按照我的回答中的模式。我更新了答案以包含另一个字段和约束。
猜你喜欢
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多