Разные режимы формирования запроса SQL
Разные режимы формирования запроса SQL
В Access 2002 запросы SQL можно создавать в одном из двух режимов запроса ANSI SQL [16] :
• ANSI-89 описывает традиционный синтаксис SQL. Этот режим близок к спецификации ANSI-89 уровня 1, но не является совместимым с ANSI-89 уровня 1. Некоторые средства ANSI-89 SQL не реализованы, а подстановочные знаки удовлетворяют спецификации Visual Basic для приложений (VBA), но не спецификации SQL;
• в ANSI-92 имеются новые зарезервированные слова, правила синтаксиса и подстановочные знаки, расширяющие возможности создания запросов, фильтров и инструкций SQL. Этот режим близок к спецификации ANSI-92 уровня 1, но не является совместимым с ANSI-92 уровня 1. В данном режиме запроса содержится больше синтаксиса ANSI, а подстановочные знаки удовлетворяют спецификации SQL.
В Microsoft Access 2002 средства ADOX [17] позволяют создавать в программах запросы, использующие синтаксис ANSI-92 SQL. Однако любые созданные запросы оставались невидимыми в окне базы данных, поскольку не было средств работы с этим режимом через интерфейс пользователя. В Microsoft Access 2002 имеется возможность установить режим работы с запросами ANSI SQL через интерфейс пользователя в качестве режима по умолчанию для новой базы данных.
Причины использования ANSI-92 SQL
Использование ANSI-92 SQL может потребоваться в следующих случаях:
• предполагается будущее развитие приложения до проекта Microsoft Access, и нужно разработать запросы, которые будут выполняться с минимальными изменениями в базе данных Microsoft SQL Server SQL Server;
• необходимо воспользоваться преимуществами новых средств, отсутствующих в ANSI-89 SQL, таких как:
– изменение настроек безопасности с помощью инструкций SQL GRANT и REVOKE;
– использование предиката DISTINCT в ссылке статистической функции, например SUM(DISTINCT);
– использование предложения LIMIT TO nn ROWS для ограничения числа строк, возвращаемых запросом.
Причины использования запросов, созданных в разных режимах ANSI SQL
Два режима запросов ANSI SQL – ANSI-89 и ANSI-92 – являются несовместимыми. При создании базы данных Microsoft Access необходимо решить, какой режим запросов будет применяться, поскольку одновременное использование запросов, созданных в обоих режимах, может привести к ошибкам при выполнении или непредсказуемым результатам. Диапазоны типов данных, зарезервированные слова и подстановочные знаки в этих режимах различаются.
Пример запроса с использованием подстановочных знаков
Запрос с использованием подстановочных знаков в условиях отбора может в разных режимах возвращать разные результаты. Так, по-разному будут выполняться следующие запросы:
• запрос ANSI-89 SQL в базе данных, настроенной на режим запросов ANSI-92, например:
SELECT * FROM Фирмы WHERE Страна Like «U*»
В нем будут возвращены все фирмы из страны U*, а не из всех стран на U, поскольку звездочка (*) не является подстановочным знаком в ANSI-92 SQL; • запрос ANSI-92 SQL в базе данных, настроенной на режим запросов ANSI-89, например:
SELECT * FROM Фирмы WHERE Страна Like «U%»
В нем будут возвращены все клиенты из страны U%, а не из всех стран на U, поскольку знак процентов (%) не является подстановочным знаком в ANSI-89 SQL. Пример запроса с совпадающими именем поля и псевдонимом Если в запросе применен псевдоним, совпадающий с именем столбца в базе данных, и создается вычисляемое поле, использующее неоднозначное имя, то в двух режимах запрос будет возвращать разные результаты. Например:
SELECT Fiie1.Kpoмe того, AS Последствия, Fiie1.Последствия, [Последствия]*1.2 AS [Оценка материального ущерба] FROM Fiie1;
В режиме ANSI-92 SQL Microsoft Access рассчитывает значение Оценка материального ущерба, используя поле Последствия, и увеличивает каждое значение в этом поле на 20 %. В режиме ANSI-89 SQL Microsoft Access рассчитывает значение Оценка материального ущерба, используя псевдоним Последствия, и в результате увеличивает каждое значение поля Кроме того на 20 %. Очевидно, что это далеко не одно и то же. Как избежать затруднений, связанных с одновременным использование разных режимов запросов ANSI SQL в одной базе данных
Советуем избегать следующих действий, чтобы не столкнуться с затруднениями, к которым приводит одновременное использование запросов, созданных в разных режимах ANSI SQL:
• преобразования баз данных Microsoft Access, настроенных на режим запросов ANSI-92 SQL, из формата файлов 2002 в формат файлов 2002 или 97. Режим запросов ANSI-92 SQL поддерживается только в формате файлов 2002;
• смены режима запросов ANSI SQL для текущей базы данных после создания одного или нескольких запросов. Если необходимо это сделать, заново протестируйте существующие запросы и перепишите их;
• импорта запросов, созданных в одном режиме запросов ANSI SQL, в базу данных Microsoft Access, настроенную на использование другого режима, или экспорта запросов, созданных в одном режиме запросов ANSI SQL, в базу данных Microsoft Access, настроенную на использование другого режима;
• смены режима запросов ANSI SQL в существующем приложении. Это может нарушить выполнение приложения и потребовать его переработки. В Microsoft Access 2002 можно менять режим запросов ANSI SQL только программным образом, а любые запросы, созданные в режиме ANSI-92, оказываются скрытыми в окне базы данных. В Microsoft Access 2002 разработчик или пользователь может менять режим запросов ANSI SQL через интерфейс пользователя, а запросы ANSI-92 не являются скрытыми в окне базы данных. Поэтому необходимо предотвратить случайную или преднамеренную смену режима запросов ANSI SQL в приложении, защитив программу и запретив смену режима через интерфейс пользователя;
• использования неоднозначных псевдонимов и имен столбцов. Во избежание затруднений проверяйте, что псевдонимы и имена столбцов в инструкциях SQL являются уникальными.
Режим запросов ANSI SQL по умолчанию для новых баз данных Microsoft Access в форматах файлов 2002 и 2000 Режим ANSI-89 является настройкой по умолчанию для новой базы данных Microsoft Access в формате файлов 2002 и 2000. Невозможно установить режим запроса SQL ANSI-92 для новой базы данных в формате файла 2002, поскольку данный параметр отключен. Режим ANSI-89 является единственной доступной настройкой для базы данных в формате файла Microsoft Access 2002.Данный текст является ознакомительным фрагментом.