В этом руководстве вы узнаете о переменных, включая объявление переменных, установку их значений и назначение переменным полей значений записи.
Что такое переменная?
Переменная — это объект, который содержит одно значение определенного типа, например, целое число, дату или переменную строку символов.
Обычно мы используем переменные в следующих случаях:
- В качестве счетчика циклов для подсчета количества выполнений цикла.
- Для хранения значения, которое будет проверено оператором управления потоком, таким как 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
На следующем рисунке показан частичный вывод:
В этом руководстве вы узнали о переменных, включая объявление переменных, установку их значений и назначение переменным полей значений записи.