题
Microsoft Jet 中 LIKE 运算符中正确的多字符通配符是什么?什么设置会影响它(如果有)?我支持一个在 Microsoft Jet(在 Access 数据库上)上运行的旧 ASP 应用程序,它在 LIKE 运算符中使用 % 符号,但我有一位客户在他的环境中显然存在问题,因为 % 字符被理解为常规字符字符,我假设他的多字符通配符是*。另外,我几乎可以肯定,过去我编写过使用 * 而不是 % 进行查询的应用程序。最后,Microsoft Access(作为应用程序)也仅适用于 * 而不是 % (但我不确定它的相关性如何)。
我只花了大约 20 分钟在互联网上搜索,没有任何有用的结果,所以我认为在 stackoverflow 上提问会很有用。有人可能已经知道了,无论如何,最好将潜在的答案保留在 stackoverflow 上,而不是任何其他随机讨论论坛。
解决方案
直接的答案是通配符的行为取决于所使用的接口的 ANSI 查询模式。
ANSI-89 查询模式(“传统模式”)使用 *
字符,ANSI-92 查询模式(“SQL Server 兼容模式”)使用 %
特点。这些模式是 ACE/Jet 特有的,与 ANSI/ISO SQL-89 和 SQL-92 标准仅有短暂的相似之处。
ADO 接口 (OLE DB) 始终使用 ANSI-92 查询模式。
DAO 接口始终使用 ANSI-89 查询模式。
使用 ODBC 时,可以通过以下方式显式指定查询模式: 扩展AnsiSQL 旗帜。
从 2003 版本开始,MS Access 用户界面可以使用任一查询模式,因此不要在任何给定时间假设它是其中一种或另一种(例如不要在验证规则中使用特定于查询模式的通配符)。
ACE/Jet SQL 语法有一个 ALIKE
关键字,它允许 ANSI-92 查询模式字符 (%
和 _
)无论接口的查询模式如何,但是都有一个轻微的缺点 ALIKE
关键字不兼容 SQL-92(但是 ALIKE
仍然高度便携)。然而,主要的缺点是我了解 ALIKE
关键字不受官方支持(尽管我无法想象它会消失或很快改变行为)。
其他提示
如果你使用DAO,使用星号(和问号的单一符号占位符)。如果您使用ADO,使用百分号(和下划线)。
您可能会发现这个有用的:
http://msdn.microsoft.com/ EN-US /库/ aa140104(office.10)的.aspx
在查询设计网格并与DAO使用*,与ADO和ASP,使用%
通过ODBC访问喷,这不是很清楚,我应该用什么通配符。我认为自然的Jet SQL的人(* /?),但因为我从来没有通过ODBC使用Jet数据,我不能说。
在Access中,正如文章Remou援引说,在代码中,它取决于你用什么样的数据访问接口 - ADO(没人应使用内访问的),你用%/ _,同时与DAO(Jet的本地接口层),可以使用Jet的天然通配符(* /?)。
有在访问执行内访问SQL的更新版本的异常。我不知道这是否是Access 2002或2003的加入,但是现在,还有就是你可以打开一个ANSI SQL 92兼容模式。如果你这样做,通配符变得%/ _代替* / ?.但是,能够选择ANSI模式只适用于访问本身 - 作为onedaywhen通知我们,你要选择不同的数据接口库使用92和DAO和ODBC 89使用不同的SQL模式,与ADO