TGViewer
SQL Portal | Базы Данных SQL Portal | Базы Данных @sqlportal · 13.7K subscribers
Post #1843 1.26K
Сегодня ковырялся в Stored Procedures в SQL.

По сути, Stored Procedure — это сохранённый набор SQL-инструкций внутри базы данных. Написал один раз, потом вызываешь сколько угодно раз.

Сегодня разобрал три вещи:
• IF / ELSE
• Обработку ошибок
• Нормальный стиль написания процедур

1. IF / ELSE
Stored Procedures умеют принимать решения.
Логика такая же, как в обычном коде:

IF условие
выполнить действие
ELSE
выполнить другое действие


Например, проверить, сдал студент экзамен или нет:
IF @Score >= 50
PRINT 'You passed!';
ELSE
PRINT 'You failed.';


Точно так же можно проверять:
право голоса по возрасту;
наличие товара на складе;
скидки для клиентов;
права администратора;
любые бизнес-правила.

Теперь стало понятно, что IF ELSE — это основной способ управлять логикой внутри процедуры.

2. Обработка ошибок

Рано или поздно что-то ломается:
деление на ноль;
дубликаты данных;
обновление несуществующих записей;
ошибки во время денежных переводов.

Для таких случаев в SQL Server есть:
BEGIN TRY
-- основной код
END TRY
BEGIN CATCH
-- обработка ошибки
END CATCH


Пример:
BEGIN TRY
SELECT @Number1 / @Number2;
END TRY
BEGIN CATCH
PRINT 'Division by zero.';
END CATCH


Полезная штука:
ERROR_MESSAGE()


Позволяет получить текст реальной ошибки:
PRINT ERROR_MESSAGE();


Ещё посмотрел на транзакции.

Идея простая:
либо выполняются все операции, либо не выполняется ни одна.


Для денежных переводов это критично.
Если одна из операций упала:

ROLLBACK TRANSACTION;


База откатит изменения и не останется в промежуточном состоянии.

3. Стиль написания Stored Procedures

SQL быстро превращается в кашу, если писать как попало.

Плохой вариант:
create procedure getstudents as begin select * from students end


Нормальный вариант:
CREATE PROCEDURE GetStudents
AS
BEGIN
SELECT *
FROM Students;
END;


Что стоит соблюдать:
понятные названия процедур;
понятные названия параметров;

SQL-ключевые слова в верхнем регистре;
отступы;

комментарии только там, где они реально нужны;
аккуратная структура кода.

Ещё узнал про:
SET NOCOUNT ON;


Эта команда отключает лишние сообщения вида:
(1 row affected)


Мелочь, но в рабочих процедурах её почти всегда добавляют.

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

👉 @SQLPortal
  • 👍 6
  • ❤ 2
More from @sqlportal
  1. Oct 9, 2026Горизонтальные или вертикальные столбцы: что выбрать? Оба варианта помогают сравнивать кат…
  2. Oct 9, 2026Оконные функции SQL: аналитика без потери отдельных строк В отличие от GROUP BY, оконные ф…
  3. Oct 8, 2026DBcooper — лёгкий клиент для работы с базами данных Open-source-приложение на Tauri, Rust…
  4. Oct 8, 20265 групп реляционных СУБД, которые полезно знать • С открытым исходным кодом: PostgreSQL, M…
  5. Oct 7, 2026Разбираем SQL-запросы с помощью Python Какие таблицы и колонки использует запрос? Библиоте…
  6. Oct 7, 2026Линтер и автоформаттер для SQL Бесплатный инструмент с открытым исходным кодом, который пр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →