Переменные

В этом руководстве вы узнаете о переменных, включая объявление переменных, установку их значений и назначение переменным полей значений записи.

Что такое переменная?

Переменная — это объект, который содержит одно значение определенного типа, например, целое число, дату или переменную строку символов.

Обычно мы используем переменные в следующих случаях:

  • В качестве счетчика циклов для подсчета количества выполнений цикла.
  • Для хранения значения, которое будет проверено оператором управления потоком, таким как WHILE.
  • Для сохранения значения, возвращаемого хранимой процедурой или функцией

Объявление переменной

Чтобы объявить переменную, используйте оператор DECLARE. Например, следующий оператор объявляет переменную с именем @model_year:

DECLARE @model_year SMALLINT;

Оператор DECLARE инициализирует переменную, присваивая ей имя и тип данных. Имя переменной должно начинаться со знака @. В этом примере тип данных переменной @model_year — SMALLINT.

По умолчанию при объявлении переменной ее значение устанавливается равным NULL.

Между именем переменной и типом данных можно использовать необязательное ключевое слово AS следующим образом:

DECLARE @model_year AS SMALLINT;

Чтобы объявить несколько переменных, разделите их запятыми:

DECLARE @model_year SMALLINT, 
        @product_name VARCHAR(MAX);

Присвоение значения переменной

Чтобы присвоить значение переменной, используйте оператор SET. Например, следующий оператор присваивает 2018 год переменной @model_year:

SET @model_year = 2018;

Использование переменных в запросе

Следующий оператор SELECT использует переменную @model_year в предложении WHERE для поиска продуктов определенного модельного года:

SELECT
    product_name,
    model_year,
    list_price 
FROM 
    production.products
WHERE 
    model_year = @model_year
ORDER BY
    product_name;

Теперь вы можете собрать все воедино и выполнить следующий блок кода, чтобы получить список продуктов, модельный год которых — 2018:

DECLARE @model_year SMALLINT;
SET @model_year = 2018;
SELECT
    product_name,
    model_year,
    list_price 
FROM 
    production.products
WHERE 
    model_year = @model_year
ORDER BY
    product_name;

Обратите внимание, что для выполнения кода необходимо нажать кнопку «Выполнить», как показано на следующем рисунке:

Переменные хранимых процедур — выполнение блока кода

На следующем рисунке показан результат:

Переменные хранимой процедуры - вывод

Сохранение результата запроса в переменной

Следующие шаги описывают, как сохранить результат запроса в переменной:

Сначала объявите переменную с именем @product_count с целочисленным типом данных:

DECLARE @product_count INT;

Во-вторых, используйте оператор SET, чтобы присвоить результирующий набор запроса переменной:

SET @product_count =(
    SELECT 
        COUNT(*) 
    FROM 
        production.products 
);

В-третьих, выведите содержимое переменной @product_count:

SELECT @product_count;

Или вы можете использовать оператор PRINT для вывода содержимого переменной:

PRINT @product_count;

или

PRINT 'The number of products is ' + CAST(@product_count AS VARCHAR(MAX));

Вывод на вкладке сообщений выглядит следующим образом:

The number of products is 204

Чтобы скрыть количество затронутых строк сообщений, используйте следующий оператор:

SET NOCOUNT ON;    

Выбор записи в переменные

Следующие шаги иллюстрируют, как объявить две переменные, назначить им запись и вывести содержимое переменных:

Сначала объявите переменные, содержащие название продукта и цену по прейскуранту:

DECLARE 
    @product_name VARCHAR(MAX),
    @list_price DECIMAL(10,2);

Во-вторых, присвойте имена столбцов соответствующим переменным:

SELECT 
    @product_name = product_name,
    @list_price = list_price
FROM
    production.products
WHERE
    product_id = 100;

В-третьих, выведите содержимое переменных:

SELECT 
    @product_name AS product_name, 
    @list_price AS list_price;

Переменные хранимых процедур — назначение записи переменной

Накопление значений в переменную

Следующая хранимая процедура принимает один параметр и возвращает список продуктов в виде строки:

CREATE  PROC uspGetProductList(
    @model_year SMALLINT
) AS 
BEGIN
    DECLARE @product_list VARCHAR(MAX);
    SET @product_list = '';
    SELECT
        @product_list = @product_list + product_name 
                        + CHAR(10)
    FROM 
        production.products
    WHERE
        model_year = @model_year
    ORDER BY 
        product_name;
    PRINT @product_list;
END;

В этой хранимой процедуре:

  • Сначала мы объявили переменную с именем @product_list с различным типом строки символов и установили ее значение равным пустому.
  • Во-вторых, мы выбрали список названий продуктов из таблицы products на основе ввода @model_year. В списке выбора мы накопили названия продуктов в переменной @product_list. Обратите внимание, что CHAR(10) возвращает символ перевода строки.
  • В-третьих, мы использовали оператор PRINT для распечатки списка продуктов.

Следующий оператор выполняет хранимую процедуру uspGetProductList:

EXEC uspGetProductList 2018

На следующем рисунке показан частичный вывод:

Переменные хранимой процедуры — пример хранимой процедуры

В этом руководстве вы узнали о переменных, включая объявление переменных, установку их значений и назначение переменным полей значений записи.

Мирослав С.

Автор статей, ИБ-специалист