← Назад к вопросам

Что такое процедура в SQL?

2.0 Middle🔥 301 комментариев
#Базы данных и SQL

Комментарии (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, но они остаются полезны для сложной логики и аналитических запросов.

Что такое процедура в SQL? | PrepBro