Убедитесь, что SQL-92 в Access 2000 MDB для SQL Server в Access 2010
Из-за обстоятельств, которые не находятся под моим полным контролем, я должен разработать запросы ACCESS, которые будут храниться в MDB Access 2000, но которые могут быть разработаны под любым из: Access 2000, 2002, 2003, 2007, 2010. Эти запросы получат доступ (через связанные таблицы) либо БД MS SQL Server, либо файл Access 2000 .MDB.
В прошлом у нас были проблемы, которые мы отслеживали по запросам, несовместимым с ANSI-92. Это мы решили, установив флажок на вкладке "Таблицы / Запросы" в диалоговом окне "Инструменты | Параметры" (в более старых версиях Access, чем 2007).
Мы перемещаем эти.MDB приложения Access между различными системами, и у нас сейчас вообще нет проблем.
Однако я только что разработал запрос, который прекрасно работает со всеми внутренними объединениями, но когда я изменяю одно из объединений на внешнее объединение, запрос завершается с ошибкой "Недопустимая операция" в Access 2010. Поэтому я подумал, что проверьте, установлен ли флажок ANSI-92. Я не мог найти это.
Теперь я ЗНАЮ, что Access 2003 и более поздние версии автоматически используют синтаксис ANSI 92, но мне было интересно, есть ли способ проверить, так ли это для этих запросов в данном случае (довольно специфические обстоятельства). Я заметил, что когда мы поменяли флажок, все мои запросы "Мне нравится" стали запросами "Подобно"...
Таким образом, вопрос сводится к тому, является ли синтаксис ANSI 92 полностью прозрачным в этих обстоятельствах, и причина, по которой мой запрос терпит неудачу, заключается в другом...
ТИА, Паоло
2 ответа
В Access 2010 параметр для совместимости синтаксиса SQL Server находится в:
Файл> Параметры> Дизайнеры объектов> Дизайн запросов.
Сначала вам нужно проверить, установлена ли эта опция или нет, чтобы подтвердить, нормально ли работает ваш запрос.
Что касается LIKE
против ALIKE
последний будет работать по ANSI-пути, используя %
а также _
сопоставление с образцом.
В режиме совместимости SQL-89 (подмножество MS Access SQL) LIKE работает только с *
а также ?
шаблоны, но если вы измените совместимость с SQL-92, вам нужно переписать ваши запросы с %
а также _
вместо.
Вот почему ALIKE
был представлен, он позволяет вам писать ANSI-совместимые шаблоны независимо от выбранного вами уровня совместимости (поэтому в режиме совместимости SQL-92 оба ведут себя одинаково).
На самом деле нет никаких причин для включения режима ANSI 92 SQL в интерфейсе Access, кроме случаев, когда вы ленивый программист SQL Server, который хочет забыть, что он пишет SQL в Access вместо SQL Server.
Причина, по которой вы не хотите этого делать, заключается в том, что она меняет вещи в приложении Access, но фактически ничего не делает для улучшения взаимодействия с вашей серверной частью SQL Server. То есть, если вы используете подстановочные знаки SQL 89 в SQL в своем внешнем интерфейсе Access, ваш драйвер ODBC позаботится о преобразовании в подстановочные знаки SQL 92 при отправке SQL на сервер. Единственным исключением были бы сквозные запросы, но они все равно написаны на собственном SQL вашего сервера.