2

我试图确认或否认您是否可以将 MS Access 2003 中的表列定义为一个集合。似乎这在 Office 2007 中实现的 - 您可以定义一个列以在查询/查找中具有“多选列表”,但据我所知,此功能似乎是新的 access 2007 文件格式所独有的。

换一种说法,MS Access 2003 是否与 SQL 语句等效:

CREATE TABLE mytable (foo VARCHAR(10), bar VARCHAR(5) MULTISET); 

还是有一个聪明的解决方法来实现类似的东西?我会接受提供有关 Access 2003 中任何集合构造函数的信息的答案。

4

1 回答 1

4

您指的是 Access 数据库引擎的多值数据类型吗?如果是这样,那么是的,这些对于 ACE (2007) 版本的引擎来说是新的,并且在作为 Access2003 版本的引擎的 Jet 4.0 中不可用。

FWIW 我使用 ANSI-92 查询模式(OLE DB,引擎类型 = 5)在 Access2007 中尝试了您的 SQL,并且无法识别 MULTISET 关键字。

请注意,您可能不需要也不想要多值类型。一个特别的批评是 Access Database SQL DML 表达式服务没有被改变以考虑多值类型。另外,请参阅这篇文章Multivalued datatypes considered dangerous

Suraj [Poozhiyil,MS Access 项目经理] 和我都完全同意开发人员不需要使用多值字段。了解数据库的人已经有了实现多对多关系的好方法,并且不会从多值字段中受益。

因此,我对开发人员的明确而肯定的建议是不要使用多值字段。除了潜在的痛苦之外,他们没有任何东西可以提供给我们。

更新:

MULTISET是一种正式从 SQL:2003 开始​​的新数据类型,所以我猜测在 Access 2007 中添加它的部分原因是完全符合 SQL 标准

这几乎很有趣。Access 团队对添加符合任何 SQL 标准的 SQL 语法没有兴趣。

[当 SQL Server 团队为其 4.0 版本修改 Jet 时,他们希望获得 SQL-92 合规性,但被 Windows 团队阻止,其组件依赖于某些不合规的功能......但这是另一回事。访问团队拥有自己的代码库私人人员,因此他们没有这样的借口……除非 SharePoint 团队现在有不当影响?我跑题了……]

考虑一下关于 SQL2003 标准的文档中的这句话:

MULTISET可以通过枚举单个元素或通过查询表达式提供元素来创建类型的值;例如,

MULTISET[1, 2, 3, 4]

或者

MULTISET( SELECT grades FROM courses )

...相反,多重集值可以用作FROM 使用运算符的子句中的表引用UNNEST

访问团队没有向 ACE SQL DML 语法添加任何新表达式或任何运算符。所以,不,这与 SQL 标准无关,与 SharePoint 无关。

David W. Fenton:不,[对多值类型的支持]以 ACCDB 格式添加(不是 ACE,正如@onedaywhen 所说......)

考虑访问团队自己的博客中的这句话:

我们添加到新 Access 引擎的主要功能是支持“复杂数据”。

这绝对是引擎功能!

于 2009-11-11T21:21:47.373 回答