我正在尝试确认或否认您是否可以将MS Access 2003中的表列定义为一个集合。似乎在Office 2007中实现 - 您可以在查询/查找中定义列以具有“多选列表”,但此功能对于新的访问2007文件格式似乎是唯一的据我所知。
另一方面,MS Access 2003是否具有与SQL语句等效的内容:
CREATE TABLE mytable (foo VARCHAR(10), bar VARCHAR(5) MULTISET);
或者是否有一个聪明的解决方法来实现类似的东西?我会接受一个答案,提供有关Access 2003中任何集合构造函数的信息。
答案 0 :(得分:4)
您指的是Access数据库引擎的multivalued data types吗?如果是这样,那么,这些是引擎的ACE(2007)版本的新功能,并且在Jet 4.0中不可用作Access2003版本的引擎。
FWIW我在Access2007中使用ANSI-92查询模式(OLE DB,引擎类型= 5)尝试了SQL,并且无法识别MULTISET关键字。
注意您可能不需要也不想要多值类型。一个特别的批评是Access数据库SQL DML表达式服务没有被改变以考虑多值类型。另外,请参阅此文Multivalued datatypes considered harmful:
Suraj [Poozhiyil,MS Access 项目经理],我同意 全心全意地说开发者不这样做 需要使用多值字段。 了解数据库的人 已经有了一个好方法 实施多对多 关系并没有任何好处 来自多值领域。
所以,我的明确和一定的建议 开发人员不要使用多值 领域。他们没有什么可以提供给我们 除了潜在的痛苦。
更新:
MULTISET是一种正式的新数据类型 从SQL:2003开始,所以我 猜测添加的部分原因 它在Access 2007中是完全的 符合SQL标准
这几乎是有趣的。 Access Team对添加符合任何SQL标准的SQL语法没有兴趣。
[当SQL Server团队为其4.0版本修改Jet时,他们希望达到SQL-92合规性但是Windows团队阻止这样做,其组件依赖于某些功能仍然不合规......但这是另一个故事。 Access团队拥有自己的私有代码库,所以他们没有这样的借口......除非SharePoint团队现在有不正当的影响力?我离题了......]
从有关SQL2003标准的文档中考虑这个引用:
MULTISET
类型的值可以是 通过枚举来创建 个别元素或通过提供 通过查询元素 表达;如,
MULTISET[1, 2, 3, 4]
或
MULTISET(
SELECT grades
FROM courses
)
......相反,多集值可以 用作
FROM
中的表格参考 使用UNNEST
运算符的子句。
Access Team尚未向ACE SQL DML语法添加任何新表达式或任何运算符。所以,不,这与SQL标准无关,也与SharePoint有关。
大卫W.芬顿:不,[支持 添加了多值类型] ACCDB格式(不是ACE,如 @onedaywhen说...)
请考虑the Access Team's own blog中的这句话:
我们添加到新功能的主要功能 访问引擎支持“复杂 数据”。
这绝对是一个引擎功能!