понедельник, 27 августа 2007 г.

X++: SELECT 1

[id:042]

Логично было ожидать, что Аксапта имеет упрощенный механизм работы с данными из СУБД. В X++ встроен диалект языка SQL.

Пробуем, создай джоб: static void BLG42_SelectQuery(Args _args) { EmplTable emplTable; select firstonly emplTable; print emplTable.Name, ' - ', emplTable.BirthDate; pause; }

Вот такой результат я получил: Ваш первый запрос в Аксапте Проанализируем.
Во-первых, объявляем табличную переменную emplTable для таблицы EmplTable. Таким образом создается курсор, который пока ссылаться в никуда.
Во-вторых, выбираем первую попавшуюся запись из таблицы EmplTable с помощью оператора "select", выборку производим не через саму таблицу EmplTable, а с помощью табличной переменной emplTable; в нее же возвращается результат. Таковы правила игры. Заметим, что ключевое слово "from" писать не нужно.
В-третьих, получаем значения полей записи, на которой сейчас стоит табличная переменная emplTable.]
В-четвертых, ключевое слово «firstonly» говорит АОС-у запросить у базы данных только первую запись. Ускорение в данном случае достигается за счет сокращения объема данных, передаваемых по сети из базы данных. В общем, ключевое слово «firstonly» на уровне языка запросов T-SQL превращается в «TOP 1».

Итог
  • табличная переменная пуста, пока не установишь ее на конкретную запись;
  • запрос к базе данных выполняется с помощью оператора select;
  • строка с запросом select также должна заканчиваться на точку с запятой, ведь это все еще X++;
  • ключевое слово firstonly значит: мне нужно только одну первую строку результата запроса и как можно быстрее.

2 комментария:

Анонимный комментирует...

Геннадий, хотелось бы узнать что значит "и как можно быстрее". Т.е. при использовании firstonly как то по другому срабатывает select?

Миша, Москва

Gennady Yun комментирует...

Привет, Михаил из Москвы.
Смотри пункт "В-четвертых..." в текущей записи блога