等效数据类型:MS Access表↔'CREATE TABLE'查询↔ODBCSQL

时间:2018-05-01 03:17:37

标签: sql ms-access types type-conversion sqldatatypes

在Access with SQL中创建表时,正确的语法是什么?我尝试过DECIMAL,DOUBLE,NUMBER,INT ......没有什么可以让我创建一个带有限制器的整数类别。

示例:

CREATE TABLE NONGAME (
  ITEM_NUM CHAR(4) NOT NULL PRIMARY KEY,
  DESCRIPTION CHAR(30),
  ON_HAND NUMBER(4),   <------- DOES NOT WORK!
  CATEGORY CHAR(3),
  PRICE DECIMAL(6,2),  <------- DOES NOT WORK!
  ANYTHING DOUBLE(4,2) <------- DOES NOT WORK!
);

2 个答案:

答案 0 :(得分:3)

MICROSOFT访问数据类型

下表显示了 Microsoft Access 数据类型,用于创建表的数据类型以及 ODBC SQL 数据类型。某些类型有限制,在表格后面列出。

Microsoft Access data type        Data type (CREATE TABLE) ODBC SQL data type  
~~~~~~~~~~~~~~~~~~~~~~~~~~        ~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~  
BIGBINARY[1]                      LONGBINARY               SQL_LONGVARBINARY   
BINARY                            BINARY                   SQL_BINARY          
BIT                               BIT                      SQL_BIT             
COUNTER                           COUNTER                  SQL_INTEGER         
CURRENCY                          CURRENCY                 SQL_NUMERIC         
DATE/TIME                         DATETIME                 SQL_TIMESTAMP       
GUID                              GUID                     SQL_GUID            
LONG BINARY                       LONGBINARY               SQL_LONGVARBINARY   
LONG TEXT                         LONGTEXT                 SQL_LONGVARCHAR[2]  
MEMO                              LONGTEXT                 SQL_LONGVARCHAR[2]  
NUMBER (FieldSize= SINGLE)        SINGLE                   SQL_REAL            
NUMBER (FieldSize= DOUBLE)        DOUBLE                   SQL_DOUBLE          
NUMBER (FieldSize= BYTE)          UNSIGNED BYTE            SQL_TINYINT         
NUMBER (FieldSize= INTEGER)       SHORT                    SQL_SMALLINT        
NUMBER (FieldSize= LONG INTEGER)  LONG                     SQL_INTEGER         
NUMERIC                           NUMERIC                  SQL_NUMERIC         
OLE                               LONGBINARY               SQL_LONGVARBINARY   
TEXT                              VARCHAR                  SQL_VARCHAR[1]      
ARBINARY                          VARBINARY                SQL_VARBINARY       

[1] Access 4.0 applications only. Max 4000 B. Behaviour similar to LONGBINARY.
[2] ANSI applications only.
[3] Unicode and Access 4.0 applications only. 
  

注意: SQLGetTypeInfo会返回ODBC个数据类型。如果多个 Microsoft Access 类型映射到相同的ODBC SQL数据类型,则不会返回所有 Microsoft Access 数据类型。 Appendix D of the ODBC Programmer's Reference中的所有转化都支持上表中列出的SQL数据类型。

Microsoft Access数据类型的限制

  • BINARY**,** VARBINARY**和** VARCHAR :创建BINARYVARBINARY或{{ 1}}零或未指定长度的列实际上返回一个510字节的列。
  • VARCHAR :即使BYTE等于NUMBER的Microsoft Access FieldSize字段未签名,也可插入负数使用Microsoft Access驱动程序时进入该字段。
  • BYTE,** CHAR**和** LONGVARCHAR** :字符串文字可以包含任何ANSI字符(十进制1-255)。使用两个连续的单引号(VARCHAR)来表示一个单引号('')。在字符数据类型列中使用任何特殊字符时,应使用过程来传递字符数据。
  • ' :日期值必须根据ODBC规范日期格式分隔,或者由日期时间分隔符(DATE分隔)。否则,Microsoft Access将该值视为算术表达式,不会引发警告或错误。
    • 例如,日期&#34; # &#34;必须表示为March 5, 1996{d '1996-03-05'};否则,如果仅提交#03/05/1996#,Microsoft Access将评估为03/05/1993。此值向上舍入为整数3 ÷ 5 ÷ 1996,并且由于零日映射到0,因此这是使用的日期。
    • 管道字符(1899-12-31)不能用在日期值中,即使用后面的引号括起来也是如此。
  • | :数据类型仅限于Microsoft Access 4.0。
  • GUID :数据类型仅限于Microsoft Access 4.0。

(更多信息见Source

ODBC桌面驱动程序数据类型的限制

Microsoft ODBC桌面数据库驱动程序对数据类型施加以下限制:

  • 所有数据类型 类型转换失败可能会导致受影响的列设置为NUMERIC
  • NULL 创建零长度BINARY列实际上会返回一个255字节的BINARY列。
  • BINARY DATE数据类型无法通过DATE函数转换为其他数据类型(或自身)。
  • CONVERT (确切数字)**不支持。
  • DECIMAL 浮点数中的小数位数可能会受到国际 Windows控制面板的部分。
  • Floating-Point Data Types 支持最高精度和28分。
  • NUMERIC CONVERT函数无法将TIMESTAMP数据类型转换为自身。
  • TIMESTAMP :TINYINT值始终是无符号的。
  • TINYINT :使用dBASE,Microsoft Excel,Paradox或Textdriver时,在列中插入零长度字符串实际上会插入{ {1}}而不是。

Source)功能

更多信息:

Erik的小附录:

您实际上可以在Zero-Length Strings次查询中使用NULL数据类型。但是,这需要使用ADO或在已设置为使用ANSI-92兼容语法的数据库上执行语句。

将数据库设置为ANSI-92兼容语法:

转到文件 - &gt;选项。打开选项卡对象设计器。转到查询设计器,在SQL Server兼容语法(ANSI 92)下,选中此数据库。现在您可以执行查询。请注意,这会影响数据库中的所有查询,并以各种方式影响查询。

使用ADO执行查询:

在VBA立即窗口中,执行以下行:

Decimal

当然,您可以使用ADO执行更复杂的查询。

答案 1 :(得分:-2)

DECIMAL和DOUBLE不能在Access中使用。对于&#34;价格&#34;,CURRENCY是最好的选择。对于我的其他整数,我只使用了NUMBER并且没有给它限制。