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