Access SQL创建表正确语法及数据类型等价关系咨询
Access SQL创建表的语法与数据类型等价问题解析
嘿,我来帮你理清这个问题——你踩的坑其实是Access SQL(Jet/ACE引擎)和标准ODBC SQL之间的语法差异导致的,很多刚接触Access SQL的开发者都会遇到这个问题。下面一步步给你拆解:
一、你的示例代码修正:正确的Access SQL写法
你尝试的NUMBER(4)、DECIMAL(6,2)、DOUBLE(4,2)写法在Access默认的ANSI-89 SQL模式下不生效,因为Access的Jet SQL不支持这种带精度参数的类型声明。这里给你修正后的代码:
CREATE TABLE NONGAME ( ITEM_NUM CHAR(4) NOT NULL PRIMARY KEY, DESCRIPTION CHAR(30), ON_HAND INTEGER, -- 对应你要的4位整数需求:INTEGER是Access短整数,范围-32768到32767,完全覆盖4位正负整数 CATEGORY CHAR(3), PRICE CURRENCY, -- 固定两位小数的金额推荐用CURRENCY,这是Access专门为货币设计的高精度类型 ANYTHING DOUBLE -- DOUBLE在Access里不需要加精度参数,本身就是双精度浮点数 );
如果你一定要用DECIMAL类型(比如需要自定义精度和小数位数),得先切换到Access的ANSI-92 SQL模式(更贴近标准SQL),切换后就可以用DECIMAL(6,2)这种标准写法了。切换路径:文件 > 选项 > 对象设计器 > 查询设计 > 勾选“SQL Server兼容语法(ANSI 92)”。
二、Access表、CREATE TABLE查询与ODBC SQL的数据类型等价关系
整理成清晰的对应列表,方便你对照:
- 文本类型
- Access表字段类型:文本
- Access SQL(ANSI-89):
CHAR(n)、TEXT(n) - Access SQL(ANSI-92):
CHAR(n)、VARCHAR(n) - ODBC SQL:
SQL_CHAR、SQL_VARCHAR
- 整数类型
- Access表字段类型:字节/整数/长整数
- Access SQL:
BYTE(0-255)、INTEGER(-3276832767)、`LONG`(-2^312^31-1) - ODBC SQL:
SQL_TINYINT、SQL_SMALLINT、SQL_INTEGER
- 小数/数值类型
- Access表字段类型:数字(字段大小设为小数)/货币
- Access SQL(ANSI-89):
CURRENCY、DECIMAL(无参数) - Access SQL(ANSI-92):
DECIMAL(p,s)、NUMERIC(p,s) - ODBC SQL:
SQL_DECIMAL、SQL_NUMERIC、SQL_CURRENCY
- 浮点类型
- Access表字段类型:数字(字段大小设为单精度/双精度)
- Access SQL:
SINGLE、DOUBLE - ODBC SQL:
SQL_REAL、SQL_DOUBLE
- 日期时间类型
- Access表字段类型:日期/时间
- Access SQL:
DATE、DATETIME - ODBC SQL:
SQL_TIMESTAMP
三、额外技巧:实现字段的数值范围限制
如果你的需求是严格限制ON_HAND为4位正整数(比如0~9999),仅靠字段类型不够,还可以添加验证规则,在CREATE TABLE里这样写:
CREATE TABLE NONGAME ( ITEM_NUM CHAR(4) NOT NULL PRIMARY KEY, DESCRIPTION CHAR(30), ON_HAND INTEGER CONSTRAINT CK_ON_HAND CHECK (ON_HAND BETWEEN 0 AND 9999), CATEGORY CHAR(3), PRICE CURRENCY, ANYTHING DOUBLE );
这样插入超出范围的数值时,Access会直接报错拦截。
内容的提问来源于stack exchange,提问作者Daniel Miller
相关产品推荐
相关产品推荐

