Возврат и использование значений из процедур SQL: подробно

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для получения возвращаемого значения из хранимой процедуры в SQL следует воспользоваться переменной в связке с командой EXEC. Применяется это следующим образом:

SQL
Скопировать код
DECLARE @Result INT;
EXEC @Result = YourProcedureName;
SELECT @Result;

Данный код вызывает процедуру под названием YourProcedureName и сохраняет её результат в переменной @Result, которую можно затем использовать по собственному усмотрению.

Кинга Идем в IT: пошаговый план для смены профессии

Подробнее о возвращаемых значениях

Хранимые процедуры возвращают значения для уведомления о результатах их выполнения. Обычно используемый тип данных INT позволяет определить успешность операции.

Создаем переменную для хранения возвращаемого значения

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

SQL
Скопировать код
DECLARE @ReturnValue INT;

Затем присваиваем результат выполнения процедуры этой переменной:

SQL
Скопировать код
EXEC @ReturnValue = YourProcedureName;

Использование возвращаемого значения в условных выражениях

Условные операторы IF-ELSE позволяют управлять потоком исполнения в зависимости от возвращаемого значения:

SQL
Скопировать код
IF @ReturnValue = 0
BEGIN
   PRINT 'Администратор базы данных приходит в бар и говорит: "Могу я получить две объединённые таблицы, пожалуйста?"';
END
ELSE
BEGIN
   PRINT 'Произошла ошибка: ' + CAST(@ReturnValue AS VARCHAR);
   -- Возможно, в следующий раз удача будет на вашей стороне.
END

Отладка с помощью команды PRINT

Для вывода отладочной информации на экран используется команда PRINT.

SQL
Скопировать код
PRINT 'Вернулось: ' + CAST(@ReturnValue AS VARCHAR);

Так вы можете увидеть возвращаемое значение в текстовой форме.

Компактный SQL-скрипт для управления результатом

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

SQL
Скопировать код
DECLARE @MyReturn INT;
EXEC @MyReturn = MyProcedure;
IF @MyReturn = 0
   PRINT 'Все в порядке!';
ELSE
   PRINT 'Ошибка: ' + CAST(@MyReturn AS VARCHAR);

Как управлять несколькими возвращаемыми значениями и использовать выходные параметры

SQL предлагает множество инструментов для работы с процедурами, включая использование выходных параметров, когда одного возвращаемого значения недостаточно.

Получение выходных параметров

Чтобы извлечь дополнительные данные помимо целочисленного результата, используйте параметры OUTPUT.

SQL
Скопировать код
DECLARE @Return INT, @OutParam VARCHAR(100);
EXEC @Return = MyProcedureWithOutput @Data = @OutParam OUTPUT;
PRINT @OutParam;

Работа с несколькими процедурами

Если требуется выполнить несколько процедур, то каждый из результатов следует отслеживать отдельно.

SQL
Скопировать код
DECLARE @FirstResult INT, @SecondResult INT;
EXEC @FirstResult = FirstProcedure;
EXEC @SecondResult = SecondProcedure;

Сложное ветвление с помощью условных операторов

Для более сложных алгоритмов можно применять конструкции CASE или вложенные IF-ELSE.

Визуализация

Процесс получения возвращаемого значения из хранимой процедуры SQL можно сравнить с покупкой лотерейного билета:

💰 Лотерея "SQL Джекпот" 💰

  • 🎟️ Покупаем билет (выполняем хранимую процедуру)
  • 💵 Забираем выигрыш (оцениваем возвращаемое значение)
SQL
Скопировать код
-- Снимаем защиту с лотерейного билета:
DECLARE @LotteryNumber INT;
EXEC @LotteryNumber = SQLJackpot;

Проверяем выигрыш:

💵 Выигрыш по лотерее "SQL Джекпот": @LotteryNumber

Также как и лотерейный билет, возвращаемое значение может содержать разные "призы", то есть результаты выполнения процедуры.

Надежность вашего SQL-кода: ошибки и крайние случаи

Ни один программист не застрахован от внезапных ошибок или неприятных ситуаций с NULL. Вот несколько советов, как справиться с этими сложностями на профессиональном уровне.

Обработка ошибок с применением TRY-CATCH

Для повышения устойчивости вашей программы к возможным ошибкам используйте блоки TRY-CATCH.

SQL
Скопировать код
BEGIN TRY
   DECLARE @Result INT;
   EXEC @Result = ErrorProneProcedure;
   IF @Result = 0
       PRINT 'Всё идет по плану...';
END TRY
BEGIN CATCH
   PRINT 'О нет, возникли проблемы при соединении с базой данных...';
END CATCH

Борьба с NULL

Для предотвращения проблем, связанных с NULL, стоит использовать функции ISNULL() или COALESCE().

SQL
Скопировать код
IF ISNULL(@ReturnValue, -1) = 0
   PRINT 'Система функционирует без сбоев!';
ELSE
   PRINT 'У нас проблема, Хьюстон: обнаружен NULL!';

Динамический SQL и область видимости переменных

Для корректной работы с динамическим SQL и его особенностями подойдет функция sp_executesql.

SQL
Скопировать код
EXEC sp_executesql @DynamicSQL, N'@DynamicResult INT OUTPUT', @DynamicResult OUTPUT;

Эта функция обеспечивает правильную работу переменных в соответствующей области видимости и позволяет контролировать процесс.

Полезные материалы

  1. RETURN (Transact-SQL) – SQL Server | Microsoft Docs — Подробно о команде RETURN с наглядными примерами.
  2. Calling stored procedure with return value – Stack Overflow — Ценный ресурс для тех, кто хочет изучить получение возвращаемых значений из хранимых процедур.
  3. Sql Server – How To Write a Stored Procedure in SQL Server – CodeProject — Детальное руководство по созданию хранимых процедур, включая обработку возвращаемых значений.