13

Microsoft Jet 中的 LIKE 运算符中正确的多字符通配符是什么?什么设置会影响它(如果有)?我支持在 Microsoft Jet(在 Access 数据库上)上运行的旧 ASP 应用程序,它使用 LIKE 运算符中的 % 符号,但我有一个客户显然在他的环境中遇到问题,因为 % 字符被理解为常规字符,我假设他的多字符通配符是 *. 另外,我几乎可以肯定,在过去我使用 * 而不是 % 编写了带有查询的应用程序。最后,Microsoft Access(作为应用程序)也仅适用于 * 而不是 % (但我不确定它的相关性)。

我只花了大约 20 分钟在互联网上搜索,没有任何有用的结果,所以我认为在 stackoverflow 上提问会很有用。可能有人已经知道了,无论如何,最好将潜在答案保留在 stackoverflow 上,而不是任何其他随机讨论论坛。

4

4 回答 4

14

直接的答案是通配符的行为取决于所使用接口的 ANSI 查询模式。

ANSI-89 查询模式('传统模式')使用*字符,ANSI-92 查询模式('SQL Server 兼容模式')使用%字符。这些模式特定于 ACE/Jet,并且与 ANSI/ISO SQL-89 和 SQL-92 标准有相似之处。

ADO 接口 (OLE DB) 始终使用 ANSI-92 查询模式。

DAO 接口始终使用 ANSI-89 查询模式。

使用 ODBC 时,可以通过ExtendedAnsiSQL标志显式指定查询模式。

MS Access 用户界面,从 2003 版本开始,可以使用任何一种查询模式,因此在任何给定时间都不要假设它是一种或另一种(例如,不要在验证规则中使用特定于查询模式的通配符)。

ACE/Jet SQL 语法有一个ALIKE关键字,它允许 ANSI-92 查询模式字符 (%_) 而不管接口的查询模式如何,但是有一个ALIKE关键字不兼容 SQL-92 的小缺点(但ALIKE仍然具有高度可移植性) . 然而,主要缺点是我知道该ALIKE关键字不受官方支持(尽管我无法想象它会很快消失或改变行为)。

于 2009-04-06T10:21:26.873 回答
4

如果您使用的是 DAO,请使用星号(以及单个符号占位符的问号)。如果您使用 ADO,请使用百分号(和下划线)。

于 2009-04-05T16:10:50.850 回答
3

您可能会发现这很有用:

http://msdn.microsoft.com/en-us/library/aa140104(office.10).aspx

在查询设计网格中,DAO 使用 *,ADO 和 ASP 使用 %

于 2009-04-05T16:10:58.057 回答
2

通过 ODBC 访问 Jet,我不清楚应该使用哪些通配符。我假设是自然的 Jet SQL (*/?),但由于我从不通过 ODBC 使用 Jet 数据,所以我不能说。

在 Access 中,正如 Remou 引用的文章所说,在代码中,它取决于您使用的数据访问接口——ADO(没有人应该在 Access 中使用),您使用 %/_ ,而使用 DAO(Jet 的本机接口层),您使用 Jet 的本机通配符 (*/?)。

在 Access 中执行 SQL 的更高版本的 Access 中存在异常。我不知道是 Access 2002 还是 2003 添加了它,但是现在,您可以打开一个 ANSI SQL 92 兼容模式。如果这样做,通配符将变为 %/_ 而不是 */?。但是能够选择 ANSI 模式仅适用于 Access 本身——正如 onedaywhen 告诉我们的那样,您必须选择不同的数据接口库来使用不同的 SQL 模式,其中 ADO 使用 92 和 DAO 和 ODBC 89。

于 2009-04-05T17:13:47.360 回答