Подстановочные знаки Microsoft Jet: знак звездочки или процент?
Каков надлежащий многосимвольный шаблон в операторе LIKE в Microsoft Jet и какой параметр влияет на него (если есть)? Я поддерживаю старое приложение ASP, которое работает на Microsoft Jet (в базе данных Access), и оно использует символ% в операторе LIKE, но у меня есть клиент, у которого, по-видимому, есть проблемы в его среде, потому что символ% понимается как обычный характер, и я предполагаю, что его многосимвольный шаблон *. Кроме того, я почти уверен, что в прошлом я написал приложение с запросами, используя * вместо%. Наконец, Microsoft Access (как приложение) также работает только с *, а не% (но я не уверен, насколько это важно).
Я просто потратил около 20 минут на поиск в Интернете без каких-либо полезных результатов, и поэтому я подумал, что было бы полезно спросить о stackoverflow. Кто-то, возможно, уже это знает, и лучше оставить потенциальные ответы на stackoverflow, чем любой другой случайный дискуссионный форум в любом случае.
Ответы
Ответ 1
Прямой ответ заключается в том, что поведение подстановочных знаков зависит от режима запроса 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.
Пользовательский интерфейс MS Access, начиная с версии 2003 года, может использовать либо режим запроса, поэтому не предполагайте, что он один или другой в любой момент времени (например, не используйте подстановочные символы, зависящие от режима запроса в Validation Правила).
Синтаксис ACE/Jet SQL имеет ключевое слово ALIKE
, которое позволяет символам режима запроса ANSI-92 (%
и _
) независимо от режима запроса интерфейса, однако имеет небольшой недостаток ALIKE
не совместимо с SQL-92 (однако ALIKE
остается очень переносимым). Главный недостаток, однако, заключается в том, что я понимаю, что ключевое слово ALIKE
официально не поддерживается (хотя я не могу себе представить, что оно исчезнет или изменит поведение в ближайшее время).
Ответ 2
Если вы используете DAO, используйте звездочку (и знак вопроса для одиночного символьного заполнителя). Если вы используете ADO, используйте знак процента (и подчеркивание).
Ответ 3
Вы можете найти это полезным:
http://msdn.microsoft.com/en-us/library/aa140104(office.10).aspx
В сетке проектирования запроса и с помощью DAO вы используете *, с ADO и ASP вы используете%
Ответ 4
Доступ к Jet через ODBC, мне не ясно, какие маски должны использоваться. Я бы предположил, что это обычные Jet SQL (*/?), Но поскольку я никогда не использую данные Jet через ODBC, я не могу сказать.
Внутри Access, как говорится в статье Remou cites, в коде, это зависит от того, какой интерфейс доступа к данным вы используете - ADO (который никто не должен использовать из Access), вы используете%/_, тогда как с DAO (Jet собственный слой интерфейса), вы используете родные групповые символы Jet (*/?).
В более поздних версиях Access выполняется SQL-запрос в Access. Я не знаю, добавил ли он Access 2002 или 2003, но в настоящее время существует режим совместимости с ANSI SQL 92, который вы можете включить. Если вы это сделаете, подстановочные знаки станут%/_ вместо */?. Но возможность выбора режима ANSI применяется только в самом доступе - как уже сообщалось, мы должны выбрать разные библиотеки интерфейса данных для использования разных режимов SQL, с ADO с использованием 92 и DAO и ODBC 89.