Хранимые процедуры активно используются для решения самых разнообразных задач, связанных с аспектами работы сервера и функционированием баз данных и всех ее объектов. Информация обо всех аспектах работы сервера хранится в системных таблицах. Причем каждая из них имеет конкретное назначение. Изменение значений в этих таблицах приводит к изменению тех или иных аспектов работы сервера или баз данных. Пользователи могут изменять значения в этих таблицах напрямую с помощью команд UPDATE, INSERT, SELECT и DELETE. Однако выполнение неверной команды может вывести из строя весь сервер и будет очень трудно восстановить его работоспособность. Кроме того, часто для осуществления одной операции необходимо выполнить множество команд. Чтобы избавить пользователя от рутины и обеспечить высокую безопасность выполняемых изменений, в SQL Server 2000 используются специальные системные хранимые процедуры (system stored procedure). Количество этих процедур составляет несколько сотен. Для удобства они разбиты на отдельные группы, каждая из которых предназначена для решения специфических задач. Например, имеются процедуры для управления системой репликации, процедуры для управления системой безопасности, процедуры для управления курсорами, процедуры для управления работой службы SQL Server Agent и некоторые другие.
Системные хранимые процедуры характеризуются тем, что они хранятся в системной базе данных Master и в своем названии имеют префикс sp, после которого следует символ подчеркивания и затем имя собственно процедуры. Например, sp_help_fulltext_columns_cursor или sp_attach_db.
Расширенные хранимые процедуры (extended stored procedure) по своей природе коренным образом отличаются от системных и пользовательских хранимых процедур. Хотя вызов этих процедур и выполняется подобно другим процедурам, тем не менее, они представляют собой динамически подключаемые библиотеки (файлы dll). To есть расширенные хранимые процедуры представляют собой отдельные программы, которые в операционной системе могут играть роль самостоятельного приложения. Расширенные хранимые процедуры имеют префикс хр.
В SQL Server 2000 имеется набор встроенных расширенных хранимых процедур, в частности используемых для отправки сообщений по электронной почте и для трассировки обращений к SQL Server 2000. Пользователи могут создавать новые хранимые процедуры с помощью любого языка, допускающего создание библиотек. При этом они должны использовать интерфейс программирования SQL Server Open Data Services API.
Готовую библиотеку необходимо зарегистрировать в SQL Server 2000, после чего пользователи смогут применять реализованные в ней функции. Регистрация библиотеки производится при помощи хранимой процедуры sp_addextendedproc, имеющей следующий синтаксис:
Параметр @functname определяет имя, по которому будет вызываться функция. Можно использовать любое имя, в том числе и с префиксом sp или хр. Однако это необязательно. Параметр @dllname задает путь к нужному dll-файлу. Регистрация расширенных хранимых процедур должна выполняться в контексте базы данных Master.
Типичным примером расширенной хранимой процедуры является процедура xp_cmdsheli, с помощью которой можно вызвать интерфейс командной строки и выполнить любые команды. Приведенный ниже пример выводит в окне Query Analyzer содержимое корневого каталога диска С:.
exec xp_cmdshell 'dir c:\'
Вызов хранимых процедур может быть выполнен с помощью ключевого exec(ute). В качестве параметров в предложении exec указывается имя процедуры.