Поделиться через


Хранимые процедуры (ядро СУБД)

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsСистема аналитической платформы (PDW)SQL база данных в Microsoft Fabric

Хранимая процедура в SQL Server — это группа одной или нескольких инструкций Transact-SQL или ссылка на метод microsoft платформа .NET Framework common runtime (CLR). Процедуры аналогичны конструкциям в других языках программирования, поскольку обеспечивают следующее:

  • обрабатывают входные параметры и возвращают вызывающей программе значения в виде выходных параметров;

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

  • возвращают значение состояния вызывающей программе, таким образом передавая сведения об успешном или неуспешном завершении (и причины последнего).

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

В следующем списке описываются преимущества использования процедур.

Снижение сетевого трафика между клиентами и сервером

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

Повышенная безопасность.

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

Предложение EXECUTE AS можно указать в CREATE PROCEDURE инструкции, чтобы включить олицетворение другого пользователя или разрешить пользователям или приложениям выполнять определенные действия базы данных без необходимости прямых разрешений на базовые объекты и команды. Например, некоторые действия, такие как TRUNCATE TABLE не имеют предоставленных разрешений. Для выполнения TRUNCATE TABLEпользователь должен иметь ALTER разрешения на указанную таблицу. Предоставление пользователю ALTER разрешений на таблицу может не быть идеальным, так как пользователь фактически имеет разрешения далеко за пределами возможности усечения таблицы. Включив TRUNCATE TABLE инструкцию в модуль и указав, что модуль выполняется как пользователь с разрешениями на изменение таблицы, вы можете расширить разрешения на усечение таблицы пользователю, которому предоставлено EXECUTE разрешение на модуль.

Когда приложение вызывает процедуру по сети, отображается только вызов выполнения процедуры. Поэтому вредоносные пользователи не могут просматривать имена таблиц и объектов базы данных, внедрять инструкции Transact-SQL в собственные или искать критически важные данные.

Использование параметров в процедурах помогает предотвратить атаки типа «инъекция SQL». Так как входные данные параметров рассматриваются как литеральное значение, а не как исполняемый код, злоумышленнику сложнее вставить команду в инструкции Transact-SQL в процедуре и компрометации безопасности.

Вы можете зашифровать процедуры, чтобы скрыть исходный код. Дополнительные сведения см. в статье о шифровании SQL Server.

Повторное использование кода

Код для любой повторной операции базы данных является идеальным кандидатом для инкапсуляции в процедурах. Этот подход устраняет необязастые перезаписи одного и того же кода, уменьшает несоответствие кода и позволяет любому пользователю или приложению с необходимыми разрешениями на доступ к коду и их выполнению.

Более легкое обслуживание

Когда клиентские приложения вызывают процедуры и поддерживают операции базы данных на уровне данных, необходимо обновить только процедуры для любых изменений в основной базе данных. Уровень приложений остается отдельным и не должен знать о каких-либо изменениях макетов баз данных, связей или процессов.

Улучшенная производительность

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

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

Типы хранимых процедур

User-defined

Определяемую пользователем процедуру можно создать в определяемой пользователем базе данных или во всех системных базах данных, кроме Resource базы данных. Процедура может быть разработана в Transact-SQL или в качестве ссылки на общий язык среды выполнения .NET Framework (CLR).

Temporary

Временные процедуры — это один из видов пользовательских процедур. Временные процедуры похожи на постоянную процедуру, за исключением того, что они хранятся в tempdb. Существует два типа временных процедур: локальные и глобальные. Они отличаются друг от друга именами, видимостью и доступностью. Локальные временные процедуры имеют знак единого номера (#) в качестве первого символа их имен. Они видны только текущему подключению пользователя и удаляются при закрытии подключения. Глобальные временные процедуры имеют два знака числа (##) в качестве первых двух символов их имен. Они видны любому пользователю после создания, и они удаляются в конце последнего сеанса с помощью процедуры.

System

Системные процедуры включены в ядро СУБД. Они физически хранятся в внутренней, скрытой Resource базе данных и логически отображаются в sys схеме каждой системной и определяемой пользователем базы данных. Кроме того, msdb база данных также содержит системные хранимые процедуры в dbo схеме, которая используется для планирования оповещений и заданий. Так как системные процедуры начинаются с префикса sp_, не используйте этот префикс при именовании определяемых пользователем процедур. Полный список системных процедур см. в разделе "Системные хранимые процедуры".

SQL Server поддерживает системные процедуры, которые предоставляют интерфейс от SQL Server к внешним программам для различных действий обслуживания. Эти расширенные xp_ процедуры используют префикс. Полный список расширенных процедур см. в разделе "Общие расширенные хранимые процедуры".

Определяемый пользователем расширенный

Расширенные процедуры позволяют создавать внешние подпрограммы на языке программирования, например C. Эти процедуры представляют собой библиотеки DLL, которые экземпляр SQL Server может динамически загружать и запускать.

Note

Расширенные хранимые процедуры будут удалены в будущей версии SQL Server. Не используйте эту функцию в новой работе разработки и не изменяйте приложения, которые в настоящее время используют эту функцию как можно скорее. Вместо них рекомендуется создавать процедуры CLR. Этот метод более надежен и безопасен, чем использование расширенных хранимых процедур.

Описание задачи Article
Описывает создание хранимой процедуры. Создание хранимой процедуры
Описывает изменение хранимой процедуры. Изменение хранимой процедуры
Описывает удаление хранимой процедуры. Удаление хранимой процедуры
Описывает выполнение хранимой процедуры. Выполнение хранимой процедуры
Описывает предоставление разрешений на хранимую процедуру. Предоставление разрешений для хранимой процедуры
Описывает возврат данных из хранимой процедуры в приложение. Возврат данных из хранимой процедуры
Описывает перекомпиляцию хранимой процедуры. Перекомпиляция хранимой процедуры
Описывает переименование хранимой процедуры. Переименование хранимой процедуры
Описывает просмотр определения хранимой процедуры. Просмотр определения хранимой процедуры
Описывает просмотр зависимостей хранимой процедуры. Просмотр зависимостей хранимой процедуры
Описывает, как параметры используются в хранимой процедуре. Parameters