Убедитесь, что SQL-92 в Access 2000 MDB для SQL Server в Access 2010 - PullRequest
3 голосов
/ 17 июня 2011

Из-за обстоятельств, которые не находятся полностью под моим контролем, мне приходится разрабатывать запросы 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 полностью прозрачным в этих обстоятельствах, и причина, по которой мой запроспровал - это что-то еще ...

TIA, Paolo

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

В Access 2010 параметр совместимости синтаксиса SQL Server находится в:

Файл> Параметры> Конструкторы объектов> Дизайн запросов.

Сначала вам потребуетсячтобы проверить, установлена ​​ли эта опция или нет, чтобы подтвердить, нормальное ли поведение вашего запроса.

Что касается LIKE против ALIKE, последний будет работать в режиме ANSI, используя %и _ сопоставление с образцом.
В режиме совместимости с SQL-89 (подмножество MS Access SQL) LIKE работает только с шаблонами * и ?, но если вы измените совместимость на SQL-92, вам необходимовместо этого переписать ваши запросы с % и _.

Именно поэтому была введена ALIKE, она позволяет вам писать ANSI-совместимые шаблоны независимо от выбранного вами уровня совместимости (поэтому в режиме совместимости с SQL-92 оба ведут себя одинаково).

0 голосов
/ 17 июня 2011

На самом деле нет никаких причин для включения режима ANSI 92 SQL в интерфейсе Access, кроме случаев, когда вы ленивый программист SQL Server, который хочет забыть, что он пишет SQL в Access вместо SQL Server.

Причина, по которой вы не хотите этого делать, заключается в том, что она меняет вещи в приложении Access, но фактически ничего не делает для улучшения взаимодействия с вашей серверной частью SQL Server.То есть, если вы используете подстановочные знаки SQL 89 в SQL в своем внешнем интерфейсе Access, ваш драйвер ODBC позаботится о преобразовании в подстановочные знаки SQL 92 при отправке SQL на сервер.Единственным исключением были бы сквозные запросы, но они все равно написаны на собственном SQL вашего сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...