Включает режим совместимости SQL-заппросов для версий Visual FoxPro 7.0, 8.0, и 9.0.
SET ENGINEBEHAVIOR 70 | 80 | 90 |
Параметры
- 70
- Включает режим совместимости команд SQL в системе Visual FoxPro как в версиях, ниже 8.0.
- 80
- Определяет выполнение команд SQL для версии Visual FoxPro 8.0. в следующей таблице описаны особенности данного режима.
Опции SQL SELECT Поведение команды SELECT-SQL DISTINCT
Вы не можете использовать опцию DISTINCT с полями типа Memo или General. Вместо этого используйте функции PADR( ) или ALLTRIM( ) для этих полей.
Дополнительно см. Функции PADL( ) | PADR( ) | PADC( ) и функция ALLTRIM( ).
UNION
Опция UNION не поддерживается для полей типа Memo без предиката ALL, включенного в команду SQL SELECT.
GROUP BY
В опции GROUP BY должно быть указано поле из списка полей оператора SELECT , для которого выполняется агрегатная функция, такая как COUNT( ). Кроме того, опция GROUP BY должна содержать поле группировки, содержащееся в опции HAVING, исключая поля из агрегатных функций.
Например, следующая команда генерирует ошибку в опции GROUP BY , потому, что поле company не указано в группировке.
Копировать код
SELECT company, country FROM Customer GROUP BY country
Вы можете включать агрегатные функции в список SELECT без указания их в опции GROUP BY.
Например, следующая команда использует COUNT( ) для поля
company
без указания его в опции GROUP BY .SELECT COUNT(company), country FROM Customer GROUP BY country
HAVING
Оператор SQL SELECT может содержать опцию HAVING без ссылки на опцию GROUP BY , при этом в операторе SQL SELECT не должно быть агрегатных функций.
Например, следующая команда фильтрует запрос по заданной величине "Sweden".
Копировать код
SELECT customerid FROM customers HAVING country="Sweden"
LIKE
Оператор SQL SELECT автоматически не удаляет "хвостовые" пробелы для значений в конструкции LIKE. В предыдущей версии Visual FoxPro 7.0, в обеих переменных в конструкции LIKE, перед сравнением удалялись "хвостовые" пробелы .
Например, В следующей команде выбираются данные из таблицы, имеющей следующие значения в каждой из строк, соответственно: "1.", "12 ", и "123".
Копировать код
SELECT * FROM table1 WHERE column1 LIKE "1__"
В Visual FoxPro 7.0 и младших версиях в результате вернулась бы одна запись, со значением "123". В Visual FoxPro 8.0 в результат попадают три записи: , "1 ", "12 ", и "123".
Если начальные символы совпадают, а следующие за ним удовлетворяют "маске", и имеют фиксированную длину, то конструкция LIKE обеспечивает их включение в результат запроса, "Хвостовые" пробелы не отбрасываются
- 90
- Определяет выполнение команд SQL в соответствие со стандартными требованиями версии Visual FoxPro 9.0 (По-умолчанию) . В следующей таблице описаны особенности применения оператора SQL SELECT.
Опции SQL SELECT Поведение команды SQL-SELECT TOP nExpr
Когда используется данная опция: TOPnExpr[PERCENT] , команда SQL SELECT возвращает в результате не больше указанного количества записей: nExpr[PERCENT] . Дополнительно: SQL -средство в этом случае более эффективно использует доступную память и быстрее получает результат запроса, когда опция TOP указывается без ключевого слова PERCENT .
GROUP BY
Когда в запросе используется агрегатная функция, такая как MAX( ), и в команде SQL SELECT отсутствует конструкция GROUP BY , то записей в результате не будет, Visual FoxPro поместит в результат одну запись, системная переменная _TALLY будет = 1. В предыдущих версиях записей в результате не будет, _TALLY = 0.
ORDER BY
Команда SELECT … DISTINCT … ORDER BY генерирует ошибку если в опции ORDER BY указывается поле, которое отсутствует в списке полей команды SELECT .
Копировать код
CREATE CURSOR foo (f1 int, f2 int)
SELECT DISTINCT f1 FROM foo ORDER BY f2 INTO CURSOR resHAVING
Команда SELECT … DISTINCT … HAVING генерирует ошибку если в опции HAVING указано поле, отсутствующее в списке команды SELECT.
Копировать код
CREATE CURSOR foo (f1 int, f2 int)
SELECT DISTINCT f1 from foo HAVING f2>1 INTO CURSOR res
Комментарии
Действие команды SET ENGINEBEHAVIOR является глобальным.
Использование установки SET ENGINEBEHAVIOR = 70 может привести к неожиданным результатам при выполнении команды SQL SELECT с опциями DISTINCT и UNION для молей типа MEMO, а также при использовании опций GROUP BY , HAVING без указания конструкции GROUP BY, а также когда используется оператор сравнения LIKE .
Когда используется установка SET ENGINEBEHAVIOR = 70 или = 80, относительно опции TOP в команде SQL SELECT в результат запроса может попасть более чем nExpr записей когда в команде также присутствует опция ORDER BY. Например, Вы задаете nExpr=10. Если в таблице имеется более чем 10 записей с одинаковым значением поля группировки, которое указано в опции ORDER BY , то в результате запроса будет больше чем 10 записей.
См. также
Другие ссылки
Общее описание команды SETКоманда SELECT - SQL
Функция SYS(3099) - SQL Data Engine Compatibility Mode