Microsoft Jet通配符:星号或百分号?

时间:2009-04-05 15:32:01

标签: sql ms-jet-ace

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

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

4 个答案:

答案 0 :(得分: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标志显式指定查询模式。

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

ACE / Jet SQL语法有一个ALIKE关键字,它允许ANSI-92查询模式字符(%_),无论接口的查询模式如何,但是ALIKE关键字与SQL-92兼容的轻微缺点(但ALIKE仍然非常便携)。然而,主要的缺点是我理解ALIKE关键字没有得到官方支持(尽管我无法想象它会很快消失或改变行为)。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

您可能会觉得这很有用:

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

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

答案 3 :(得分: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。