Содержание статьи

В SQL значение переменной можно вывести разными способами в зависимости от СУБД и контекста выполнения. В Microsoft SQL Server чаще всего используют конструкцию SELECT или команду PRINT, тогда как в PostgreSQL применяются блоки DO или функции RAISE NOTICE. Понимание различий позволяет быстрее находить ошибки и проверять промежуточные данные при работе с запросами и процедурами.
Объявление переменной в SQL Server
DECLARE @myVar INT;
Можно одновременно объявлять несколько переменных, разделяя их запятыми:
DECLARE @id INT, @name NVARCHAR(50), @created DATETIME;
Тип данных выбирается исходя из требований к хранению информации. Ниже приведены распространённые типы и их назначение:
| Тип данных | Описание | Пример использования |
|---|---|---|
| INT | Целые числа | @count INT |
| NVARCHAR(n) | Строки переменной длины, поддержка Unicode | @username NVARCHAR(50) |
| DATETIME | Дата и время | @createdAt DATETIME |
| DECIMAL(p,s) | Числа с фиксированной точкой, для точных вычислений | @price DECIMAL(10,2) |
| BIT | Булевы значения (0 или 1) | @isActive BIT |
После объявления переменной её можно инициализировать с помощью SET или сразу при объявлении через =:
DECLARE @myVar INT = 10;
Рекомендуется давать переменным понятные имена, отражающие их назначение, чтобы облегчить чтение и поддержку скриптов.
Присвоение значения переменной
В SQL Server переменной можно присвоить значение после её объявления с помощью команды SET или через SELECT. Команда SET используется для присвоения одного значения одной переменной:
DECLARE @myVar INT;
SET @myVar = 100;
Через SELECT можно присваивать значение, вычисленное на основе запроса или нескольких источников:
DECLARE @totalSales DECIMAL(10,2);
SELECT @totalSales = SUM(amount) FROM Sales WHERE SaleDate = ‘2025-12-01’;
Если необходимо присвоить значения нескольким переменным одновременно, это можно сделать только через SELECT:
DECLARE @minPrice DECIMAL(10,2), @maxPrice DECIMAL(10,2);
SELECT @minPrice = MIN(price), @maxPrice = MAX(price) FROM Products;
Использование SET обеспечивает более строгую привязку значения к переменной и предотвращает ошибки при присвоении нескольких переменных одновременно. SELECT полезен, когда значение зависит от данных таблицы.
При присвоении важно учитывать тип данных переменной и результат выражения. Например, присвоение строкового значения переменной типа INT вызовет ошибку. Для безопасной работы рекомендуется проверять тип данных и использовать функции приведения, такие как CAST или CONVERT.
В SQL Server для отображения значения переменной в результирующей таблице используется команда SELECT. Это позволяет не создавать временные таблицы и быстро проверять содержимое переменной.
DECLARE @myVar INT = 42;
SELECT @myVar;
Для улучшения читаемости результата можно задать псевдоним столбцу:
SELECT @myVar AS ResultValue;
DECLARE @minPrice DECIMAL(10,2), @maxPrice DECIMAL(10,2);
SET @minPrice = 10.50;
SET @maxPrice = 99.99;
SELECT @minPrice AS MinPrice, @maxPrice AS MaxPrice;
Особенности использования SELECT для переменных:
- Можно включать переменные в вычисления: SELECT @total = @minPrice + @maxPrice;
- Допускается комбинировать переменные с данными таблиц: SELECT @myVar, Name FROM Products;
- SELECT возвращает набор строк, поэтому при использовании в сложных скриптах удобно проверять промежуточные значения
Рекомендуется использовать псевдонимы и комментировать сложные выражения с переменными для удобства отладки и анализа результатов.
Использование PRINT для отображения переменной

DECLARE @message NVARCHAR(50) = ‘Текущее значение’;
DECLARE @count INT = 5;
PRINT @message;
PRINT @count;
Для объединения текста и значения переменной используется конкатенация через оператор +:
PRINT ‘Количество записей: ‘ + CAST(@count AS NVARCHAR(10));
Особенности работы с PRINT:
- PRINT возвращает информацию в порядке выполнения команд, что удобно для пошаговой отладки скриптов.
- Для динамических вычислений можно включать переменные в выражения: PRINT ‘Итоговая сумма: ‘ + CAST(@total AS NVARCHAR(20));
PRINT лучше использовать для отладки и логирования внутри хранимых процедур и скриптов, когда важна последовательность выполнения, а не создание таблицы результатов.
CREATE PROCEDURE GetTotalSales
AS
DECLARE @totalSales DECIMAL(10,2);
SELECT @totalSales = SUM(amount) FROM Sales;
SELECT @totalSales AS TotalSales;
GO
CREATE PROCEDURE CheckInventory
AS
DECLARE @stock INT;
SELECT @stock = COUNT(*) FROM Products WHERE Quantity < 10;
PRINT ‘Низкий запас товаров: ‘ + CAST(@stock AS NVARCHAR(10));
GO
- Использовать SELECT для возврата данных клиентскому приложению.
- Использовать PRINT для внутренней отладки и логирования.
- Проверять тип данных перед конкатенацией с текстом, применяя CAST или CONVERT.
Работа с переменными в PostgreSQL

В PostgreSQL переменные обычно используются внутри блоков DO или функций. Для объявления переменной применяется ключевое слово DECLARE, после чего переменной присваивается тип данных.
Пример объявления и присвоения значения:
DO $$
DECLARE
myVar INTEGER := 10;
BEGIN
RAISE NOTICE ‘Значение переменной: %’, myVar;
END $$;
Присвоение переменной можно выполнять как при объявлении, так и внутри блока BEGIN…END через оператор :=:
myVar := myVar + 5;
Рекомендации при работе с переменными:
- Использовать RAISE NOTICE для проверки промежуточных значений в функциях и анонимных блоках.
- Следить за типами данных при присвоении и вычислениях, применять CAST при необходимости.
- Для работы с несколькими переменными использовать отдельные объявления в секции DECLARE.
- Для возврата значений из функций использовать RETURN, а не RAISE NOTICE, если результат нужен клиенту.
Отладка значений переменных в разных СУБД

Пример отладки через SELECT:
DECLARE @totalSales DECIMAL(10,2);
SELECT @totalSales = SUM(amount) FROM Sales;
SELECT @totalSales AS TotalSales;
Пример в PostgreSQL:
DO $$
DECLARE
myVar INTEGER := 100;
BEGIN
RAISE NOTICE ‘Значение переменной: %’, myVar;
END $$;
Для сложных сценариев отладки рекомендуется:
- Проверять соответствие типов данных при конкатенации с текстом или вычислениях.
- Для повторяемых проверок создавать временные таблицы с переменными через SELECT INTO.
Поддержка отладки и точный выбор метода зависит от СУБД и требований к отображению результатов: PRINT и SELECT подходят для SQL Server, RAISE NOTICE – для PostgreSQL.
Вопрос-ответ:
Как объявить переменную и присвоить ей значение в SQL Server?
В SQL Server переменная объявляется через DECLARE, указывая имя с символом @ и тип данных. Присвоение значения выполняется через SET или SELECT. Например:
DECLARE @count INT;
SET @count = 10;
Или сразу при объявлении: DECLARE @count INT = 10;. SELECT полезен, если значение зависит от данных таблицы, например: SELECT @count = COUNT(*) FROM Orders;.
Чем отличается вывод переменной через SELECT и через PRINT?
SELECT возвращает значение в таблицу результатов, что удобно для анализа или передачи клиентскому приложению. PRINT выводит текст и значение в окно сообщений, удобное для отладки скриптов и просмотра промежуточных результатов. PRINT ограничен длиной строки, а SELECT позволяет работать с несколькими переменными одновременно.
Как проверить значение переменной внутри хранимой процедуры?
Внутри процедуры можно использовать SELECT для возврата значения клиенту или PRINT для отображения в окне сообщений. Например, для подсчёта общего количества продаж:
DECLARE @totalSales DECIMAL(10,2);
SELECT @totalSales = SUM(amount) FROM Sales;
PRINT ‘Общая сумма: ‘ + CAST(@totalSales AS NVARCHAR(20));
SELECT @totalSales AS TotalSales;
Как выводить значения переменных в PostgreSQL?
В PostgreSQL переменные применяются внутри блоков DO или функций. Для проверки значения используется RAISE NOTICE. Например:
DO
DECLAREmyVarINTEGER:=50;
BEGIN
RAISENOTICE′Значение:
DECLARE myVar INTEGER := 50;
BEGIN
RAISE NOTICE ‘Значение: %’, myVar;
END
DECLAREmyVarINTEGER:=50;
BEGIN
RAISENOTICE′Значение:;
RAISE NOTICE отображает данные в консоли клиента и подходит для проверки промежуточных вычислений.
