Основы хранимых процедур
Хранимые процедуры в MicrosoftSQL Server аналогичны процедурам в других языках программирования:
они обрабатывают входные аргументы и возвращают вызывающей процедуре или пакету значения в виде выходных аргументов;
они содержат программные инструкции, которые выполняют операции в базе данных, в том числе вызывающие другие процедуры;
они возвращают значение состояния вызывающей процедуре или пакету, таким образом передавая сведения об успешном или неуспешном завершении (и причины последнего).
Хранимые процедуры можно выполнять с помощью инструкции Transact-SQL EXECUTE. Хранимые процедуры отличаются от функций тем, что они не возвращают значения на месте своих имен, и их нельзя непосредственно использовать в выражениях.
По сравнению с программами Transact-SQL, которые хранятся локально на клиентских компьютерах, хранимые процедуры SQL Server имеют следующие преимущества.
Хранимые процедуры регистрируются на сервере.
Хранимые процедуры могут иметь атрибуты безопасности (например, разрешения) и цепочки владения, кроме того, к ним можно прикреплять сертификаты.
Пользователи могут обладать разрешениями на выполнение хранимых процедур вместо прямых разрешений для работы с объектами, на которые ссылаются эти процедуры.
Хранимые процедуры позволяют сделать защиту приложений более надежной.
Параметризованные хранимые процедуры могут защитить приложения от атак, осуществляемых путем инжекции кода SQL. Дополнительные сведения см. в разделе Инжекция SQL.
Хранимые процедуры поддерживают модульное программирование.
Процедуру можно создать один раз и потом по мере необходимости вызывать ее в программе любое число раз. Это делает обслуживание приложения более удобным и позволяет унифицировать доступ приложений к базе данных.
Хранимые процедуры представляют собой именованный код, дающий возможность отсроченного связывания.
Это обеспечивает уровень косвенности, упрощающий развитие программного кода.
Хранимые процедуры позволяют уменьшить сетевой трафик.
Операцию, занимающую сотни строк программного кода Transact-SQL, можно выполнить в одной инструкции, которая обрабатывает процедуру, а не отправляет этот код по сети.
См. также