MS Access CREATE TABLE“WITH COMPRESSION”语法?

时间:2015-07-29 20:35:34

标签: ms-access ddl

我正在尝试为Microsoft Access编写CREATE TABLE语句(使用OleDbConnection通过C#/ .NET应用程序执行),利用WITH COMPRESSION属性导致字符列(TEXT)使用单字节字符而不是Unicode双字节字符创建,如MSDN here中所述。

  

WITH COMPRESSION属性只能与CHARACTER和MEMO(也称为TEXT)数据类型及其同义词一起使用。

     

由于Unicode字符表示格式的更改,为CHARACTER列添加了WITH COMPRESSION属性。 Unicode字符统一需要每个字符两个字节。对于主要包含字符数据的现有Microsoft®Jet数据库,这可能意味着转换为Microsoft Access数据库引擎格式时,数据库文件的大小几乎会翻倍。但是,许多字符集的Unicode表示(以前称为单字节字符集(SBCS))可以很容易地压缩为单个字节。如果使用此属性定义CHARACTER列,则数据将在存储时自动压缩,并在从列中检索时解压缩。

当我尝试通过OleDbConnection执行以下语句(我相信每个MSDN在语法上是正确的)时,我收到语法错误。

CREATE TABLE [Foo] ([COL1] TEXT(255) WITH COMPRESSION)

同样,在MS Access 2013中直接执行相同的语句作为查询会在WITH处出现语法错误。

执行

CurrentProject.Connection.Execute("CREATE TABLE [Foo1] ([COL1] TEXT(255) WITH COMPRESSION)")
但是,来自Access VBA

可以正常工作。

如果我取出WITH COMPRESSION属性,该语句将通过OleDb并直接在MS Access中执行而不会出错。

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:1)

我的问题原来是一个语法错误,在我原来的问题中没有正确反映出来。

但是,解决该问题表明,MSDN https://msdn.microsoft.com/en-us/library/office/ff837200.aspx上的MS Access CREATE TABLE文档关于CREATE TABLE语句的属性序列是不正确的。根据文档,语法是:

  

CREATE [TEMPORARY] TABLE表(field1类型[(大小)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [index1] [,field2类型[(大小)] [NOT NULL] [index2] [,... ]] [,CONSTRAINT multifieldindex [,...]])

但事实上,[WITH COMPRESSION | WITH COMP]必须在 [NOT NULL]之前出现,否则会出现语法错误。

此外,无法使用MS Access中直接查询中的CREATE TABLE属性执行WITH COMPRESSION语句。您必须通过OleDbConnection使用VBA或(在我的情况下)外部程序。

答案 1 :(得分:0)

我在" WITH COMPRESSION"和MS-ACCESS 2013 无法从查询窗口运行此类脚本。 可能来自VBA但有限制:

PLAY [localhost] ********************************************************************************* TASK [Debug inventory_hostname.] ***************************************************************** ok: [localhost] => inventory_hostname: localhost TASK [Debug idempotent random string.] *********************************************************** ok: [localhost] => msg: $6$rounds=656000$21889$o7dtKP5aAPzYxyDIn9wbTRJMoQboNXtp0snNtTDvcU030aKvMyxsLzTGUuunG/hW2lBSLh/MS/C/c6Dx/uXo51 " ... WITH COMPRESSION" - > " CREATE中的语法错误    表" currentdb.Execute" ..." - >确定

我确认了什么"先生。 T"说:在NOT NULL

之前,WITH COMPRESSION 必须出现