Прямой ответ заключается в том, что поведение символов подстановки зависит от режима запросов ANSI используемого интерфейса.
В режиме запросов ANSI-89 («традиционный режим») используется символ *
, в режиме запросов ANSI-92 («режим совместимости с SQL Server») используется символ %
. Эти режимы специфичны для ACE / Jet и имеют лишь мимолетное сходство со стандартами ANSI / ISO SQL-89 и SQL-92.
Интерфейс ADO (OLE DB) всегда использует ANSI-92 Query Mode.
Интерфейс DAO всегда использует ANSI-89 Query Mode.
При использовании ODBC режим запроса может быть явно указан с помощью флага ExtendedAnsiSQL .
Пользовательский интерфейс MS Access, начиная с версии 2003 года, может использовать любой режим запроса, поэтому не предполагайте, что он является одним или другим в любой момент времени (например, не используйте специальные символы режима запроса в валидации Правила).
Синтаксис ACE / Jet SQL имеет ключевое слово ALIKE
, которое позволяет использовать символы режима запроса ANSI-92 (%
и _
) независимо от режима запроса интерфейса, однако имеет небольшой недостаток * Ключевое слово 1020 * несовместимо с SQL-92 (однако ALIKE
остается очень переносимым). Однако основным недостатком является то, что я понимаю, что ключевое слово ALIKE
официально не поддерживается (хотя я не могу представить, что оно исчезнет или изменит свое поведение в ближайшее время).