Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое процедура в SQL?
SQL процедура (Stored Procedure) — это набор SQL-команд, скомпилированный и хранящийся на сервере БД. Это переиспользуемый блок кода, который можно вызвать из приложения или других процедур.
Синтаксис
Вот пример процедуры в SQL Server:
CREATE PROCEDURE sp_CreateUser
@FirstName NVARCHAR(100),
@LastName NVARCHAR(100),
@Email NVARCHAR(100),
@UserId INT OUTPUT
AS
BEGIN
INSERT INTO Users (FirstName, LastName, Email, CreatedDate)
VALUES (@FirstName, @LastName, @Email, GETUTCDATE())
SET @UserId = SCOPE_IDENTITY()
END
Вызов из C#
using (SqlConnection conn = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand("sp_CreateUser", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FirstName", "Иван");
cmd.Parameters.AddWithValue("@LastName", "Петров");
cmd.Parameters.AddWithValue("@Email", "ivan@example.com");
SqlParameter userIdParam = new SqlParameter("@UserId", SqlDbType.Int)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(userIdParam);
conn.Open();
cmd.ExecuteNonQuery();
int newUserId = (int)userIdParam.Value;
}
}
Основные характеристики
Преимущества:
- Производительность — компилируется один раз, выполняется быстро
- Переиспользуемость — вызывается из разных приложений
- Инкапсуляция — бизнес-логика находится на БД
- Безопасность — защита от SQL-инъекций при правильном использовании параметров
- Уменьшение трафика — на клиент передаются только результаты
Недостатки:
- Сложность отладки — не всегда удобно отлаживать на БД
- Версионирование — сложнее управлять версиями, чем с кодом приложения
- Привязка к БД — процедура специфична для конкретной СУБД (SQL Server, PostgreSQL и т.д.)
- Тестирование — требует отдельных инструментов
Типы параметров
- INPUT (@Parameter) — передача данных в процедуру
- OUTPUT (@Parameter OUTPUT) — возврат значений из процедуры
- INPUT/OUTPUT — одновременная передача и получение
Функции vs Процедуры
Основное отличие: функции возвращают значение и могут использоваться в SELECT, а процедуры не возвращают значение (только параметры OUTPUT). Процедуры могут выполнять DDL и DML операции, функции — только SELECT и логику.
В современной разработке многие команды предпочитают отказываться от хранимых процедур в пользу миграций и ORM, но они остаются полезны для сложной логики и аналитических запросов.