MS Access 2016中CREATE TABLE语句语法错误求助
解决MS Access中CREATE TABLE的语法错误问题
你的代码在MS Access里报错,核心是Access的SQL语法和课本里常用的标准SQL(比如Oracle、MySQL)存在几个关键差异,具体问题和修正方案如下:
- 数据类型不兼容:Access没有
NUMBER类型,需替换为DECIMAL(如果是货币类字段,也可以用CURRENCY)。把P_PRICE NUMBER(8, 2)改成P_PRICE DECIMAL(8, 2),P_DISCOUNT NUMBER(5, 2)改成P_DISCOUNT DECIMAL(5, 2)。 - 外键约束不支持
ON UPDATE CASCADE:Access的Jet SQL不支持ON UPDATE CASCADE语法,只能使用ON DELETE CASCADE,或者直接去掉这个子句。如果需要实现更新VENDOR表V_CODE时同步更新PRODUCT表的关联字段,Access无法通过该约束实现,得借助触发器等其他方式,先去掉该子句才能让表创建成功。 - 可选优化:
UNIQUE约束写法:虽然Access支持在列定义里写UNIQUE,但单独声明约束的写法在Access里更稳妥,不过这不是必改项,保留原写法也可。
修正后的代码如下:
CREATE TABLE PRODUCT( P_CODE VARCHAR(10) NOT NULL UNIQUE, P_DESCRIPT VARCHAR(35) NOT NULL, P_INDATE DATE NOT NULL, P_QOH SMALLINT NOT NULL, P_MIN SMALLINT NOT NULL, P_PRICE DECIMAL(8, 2) NOT NULL, P_DISCOUNT DECIMAL(5, 2) NOT NULL, V_CODE INTEGER, PRIMARY KEY (P_CODE), FOREIGN KEY (V_CODE) REFERENCES VENDOR );
额外注意:
- 必须确保
VENDOR表已存在,且其主键为V_CODE,否则外键约束会报错。 - 如果你的Access版本较旧,
VARCHAR可能需要换成TEXT,比如TEXT(10)、TEXT(35),新版本Access已支持VARCHAR,若仍报错可尝试替换。
内容的提问来源于stack exchange,提问作者YoBoyAndy
相关产品推荐
相关产品推荐

