Подстановочные знаки Microsoft Jet: звездочка или знак процента? - PullRequest
13 голосов
/ 05 апреля 2009

Что такое правильный подстановочный знак в операторе LIKE в Microsoft Jet и какие настройки влияют на него (если есть)? Я поддерживаю старое приложение ASP, которое работает на Microsoft Jet (в базе данных Access) и использует символ% в операторе LIKE, но у меня есть клиент, у которого, очевидно, есть проблемы в его среде, поскольку символ% понимается как обычный символ, и я предполагаю, что его многосимвольный подстановочный знак *. Кроме того, я почти уверен, что в прошлом я писал приложения с запросами, используя * вместо%. Наконец, Microsoft Access (как приложение) также работает только с *, но не с% (но я не уверен, насколько это актуально).

Я просто потратил около 20 минут на поиск в интернете без каких-либо полезных результатов, и поэтому подумал, что было бы полезно спросить о stackoverflow. Кто-то, возможно, уже знает это, и лучше сохранить потенциальные ответы в стеке потока, чем любой другой случайный дискуссионный форум.

Ответы [ 4 ]

14 голосов
/ 06 апреля 2009

Прямой ответ заключается в том, что поведение символов подстановки зависит от режима запросов 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 официально не поддерживается (хотя я не могу представить, что оно исчезнет или изменит свое поведение в ближайшее время).

4 голосов
/ 05 апреля 2009

Если вы используете DAO, используйте звездочку (и знак вопроса для заполнителя из одного символа). Если вы используете ADO, используйте знак процента (и подчеркивание).

3 голосов
/ 05 апреля 2009

Вы можете найти это полезным:

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

В сетке проектирования запросов и с DAO, которую вы используете *, с ADO и ASP вы используете%

2 голосов
/ 05 апреля 2009

Получая доступ к Jet через ODBC, мне не ясно, какие символы подстановки следует использовать. Я бы предположил, что это обычные Jet SQL (* /?), Но так как я никогда не использую данные Jet через ODBC, я не могу сказать.

В Access, как говорится в статье, цитируемой Рему, в коде это зависит от того, какой интерфейс доступа к данным вы используете - ADO (который никто не должен использовать из Access), вы используете% / _, в то время как с DAO (Jet's) родной интерфейсный слой), вы используете родные символы Jet (* /?).

Существует исключение в более поздних версиях Access, выполняющих SQL в Access. Я не знаю, было ли это в Access 2002 или 2003, но в настоящее время существует режим совместимости с ANSI SQL 92, который вы можете включить. Если вы это сделаете, подстановочные знаки станут% / _ вместо * / ?. Но возможность выбора режима ANSI применима только в самом Access - как уже сообщало нам, вы должны выбирать разные библиотеки интерфейса данных для использования различных режимов SQL, при этом ADO использует 92, а DAO и ODBC 89.

...