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

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

我只花了大约20分钟search互联网没有任何有用的结果,所以我认为这将是有用的问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时,可以通过ExtendedAnsiSQL标志明确指定查询模式。

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

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

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

你可能会觉得这很有用:

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

在查询devise网格中,使用ADO和ASP使用*,您使用%

通过ODBC访问Jet,我不清楚应该使用什么通配符。 我假设自然的Jet SQL的(* /?),但因为我从来没有通过ODBC使用Jet数据,我不能说。

在Access中,像Remou引用的那样,在代码中,它取决于你使用哪个数据访问接口–ADO(在Access中不应该使用任何人),你使用%/ _,而使用DAO(Jet的本地接口层),你使用Jet的本地通配符(* /?)。

Access的更高版本的Access中执行SQL有一个例外。 我不知道是否添加了Access 2002或2003,但现在,您可以打开ANSI SQL 92兼容模式。 如果你这样做,通配符变成%/ _而不是* / ?. 但是能够selectANSI模式只适用于Access本身 – 正如oneday告诉我们的那样,您必须select不同的数据接口库来使用不同的SQL模式,ADO使用92和DAO和ODBC 89。

    Interesting Posts