Убедитесь, что 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 вашего сервера.

Другие вопросы по тегам