Skip to the content.

Назад

Команда SELECT

Общее описание

Особенностью использования команды SELECT в DaJet Script является то, что результат её выполнения может быть доступен только при помощи ранее объявленной переменной. Имя этой переменной указывается в предложении INTO команды SELECT. Альтернативными вариантами являются команды DECLARE или SET, которые описаны в соответствующем разделе документации, посвящённому работе с переменными. Здесь необходимо, однако, сказать, что, при использовании команды SELECT, вариант с предложением INTO является рекомендуемым и наиболее предпочтительным.

Результатом запроса может быть скалярное значение простого типа, одна запись данных object или их набор array. Соответственно поведение команды SELECT определяется типом переменной, указанной в предложении INTO. Если это простой тип данных, то, независимо от того какой результат вернёт запрос, переменной будет присвоено значение самого первого поля самой первой записи выборки. В свою очередь, если переменная имеет тип object, то аналогичным образом будут получены значения всех полей только самой первой записи выборки. Таким образом, везде, где это целесообразно, следует использовать команду вида SELECT TOP 1. Только в случае использования переменной типа array будет получен весь набор записей, возвращаемый командой SELECT. Ну и наконец, если запрос не вернёт ни одной записи, то этой переменной будет присвоено значение NULL.

Важно также отметить, что команда SELECT возвращает весь результирующий набор записей в оперативную память среды выполнения DaJet Script. То есть не рекомендуется использование этой команды, особенно совместно с переменной типа array, если возможным результатом запроса будет большое количество данных. Что считать “большим количеством данных” очень сильно зависит от конкретных условий решаемой задачи и возможностей наличного аппаратного обеспечения. Кроме этого, следует иметь в виду, что для потоковой обработки большого количества данных предназначена команда STREAM, специально предназначенная для этого разновидность команды SELECT.

Наиболее подходящими сценариями для использования команды SELECT в DaJet Script являются запросы относительно небольших по объёму данных, например, отдельно взятых значений, настроек программы или наборов параметров для организации параллельного выполнения кода.

-- ******************************************************************************
-- * Пример команды SELECT, использующей все основные возможности синтаксиса.   *
-- * Опция DISTINCT в данном случае указана только для демонстрации её наличия. *
-- ******************************************************************************

DECLARE @table   array
DECLARE @company entity

USE 'mssql://server/database'

   -- Запрос скалярного значения (entity)
   SELECT TOP 1 Ссылка INTO @company
     FROM Справочник.Организации
    WHERE Код = '00-000001'

   -- Запрос набора записей (array)
   SELECT DISTINCT TOP 10
          Номенклатура
        , Количество = SUM(CASE WHEN ВидДвижения = 0
                                THEN  Количество -- Приход
                                ELSE -Количество -- Расход
                           END)
     INTO @table
     FROM РегистрНакопления.ЗапасыНаСкладах
    WHERE Организация = @company
    GROUP BY Номенклатура
   HAVING SUM(CASE WHEN ВидДвижения = 0
                   THEN  Количество
                   ELSE -Количество END) > 0 -- Ненулевые остатки
    ORDER BY Номенклатура

END

IF @table = NULL
THEN RETURN 'Нет данных'
ELSE RETURN @table
END

Результат выполнения запроса в DaJet Studio

Номенклатура Количество
{76:d0747380-7d2b-8cfd-11e5-47e1f8c9ef49} 102.500
{76:d0747380-7d2b-8cfd-11e5-47e1f8c9ef4c} 96.400
{76:d0747380-7d2b-8cfd-11e5-47e1f8c9ef5f} 13.200
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26f7} 4.000
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26f8} 2.000
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26f9} 10.000
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fa} 1.000
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fc} 6.000
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fd} 6.000
{76:d0745583-7d2b-8cfd-11e4-b5b9429c26fe} 6.000

Наверх