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?
Миша, Москва
Привет, Михаил из Москвы.
Смотри пункт "В-четвертых..." в текущей записи блога
Отправить комментарий