Microsoft SQL Server предоставляет механизм хранимой процедуры для упрощения процесса разработки базы данных, группируя инструкции Transact-SQL в управляемые блоки. Хранимые процедуры оцениваются большинством разработчиков SQL Server, которые находят преимущества эффективности и безопасности, которые они получают, хорошо оценивают авансовые инвестиции во времени.
Преимущества использования хранимых процедур
Почему разработчик должен использовать хранимые процедуры?
Вот основные преимущества этой технологии:
- Предварительно скомпилированное выполнение: SQL Server компилирует каждую хранимую процедуру один раз, а затем повторно использует план выполнения. Это приводит к огромному увеличению производительности при многократном вызове хранимых процедур.
- Уменьшенный трафик клиент / сервер: Если пропускная способность сети является проблемой в вашей среде, вы с удовольствием узнаете, что хранимые процедуры могут сократить длинные SQL-запросы до одной строки, которая передается по кабелю.
- Эффективное повторное использование кода и абстракции программирования: Хранимые процедуры могут использоваться несколькими пользователями и клиентскими программами. Если вы будете использовать их планомерно, вы обнаружите, что цикл разработки занимает меньше времени.
- Расширенные средства обеспечения безопасности: Вы можете предоставить пользователям разрешение на выполнение хранимой процедуры независимо от базовых разрешений таблицы.
Хранимые процедуры похожи на пользовательские функции, но есть тонкие различия.
Состав
Хранимые процедуры аналогичны конструкциям, наблюдаемым на других языках программирования.
Они принимают данные в виде входных параметров, которые указаны во время выполнения. Эти входные параметры (если они реализованы) используются при выполнении ряда операторов, которые приводят к некоторому результату. Этот результат возвращается в вызывающую среду с помощью набора записей, выходных параметров и кода возврата.
Это может звучать как глоток, но вы обнаружите, что хранимые процедуры на самом деле довольно просты.
пример
Давайте рассмотрим практический пример, связанный с таблицей с именем инвентарь, показанной внизу этой страницы. Эта информация обновляется в режиме реального времени, а менеджеры склада постоянно проверяют уровни продуктов, хранящихся на их складе, и доступны для отправки. Раньше каждый менеджер выполнял запросы, похожие на следующие:
ВЫБЕРИТЕ продукт, количествоИЗ инвентаризацииWHERE Warehouse = 'FL'
Это привело к неэффективной работе на SQL Server. Каждый раз, когда диспетчер склада выполнял запрос, сервер базы данных был вынужден перекомпилировать запрос и выполнить его с нуля. Он также потребовал, чтобы менеджер склада имел знания SQL и соответствующие разрешения для доступа к информации таблицы.Вместо этого процесс можно упростить с помощью хранимой процедуры. Вот код для процедуры sp_GetInventory, которая извлекает уровни запасов для данного склада. Менеджер склада Флориды может затем получить доступ к уровням запасов, выпустив команду: Менеджер склада в Нью-Йорке может использовать одну и ту же хранимую процедуру для доступа к ресурсам этой области: Конечно, это простой пример, но преимущества абстракции можно увидеть здесь. Менеджеру склада не нужно понимать SQL или внутреннюю работу процедуры. С точки зрения производительности хранимая процедура работает чудесами. SQL Server создает план выполнения один раз, а затем повторно использует его, подключая соответствующие параметры во время выполнения.Теперь, когда вы узнали о преимуществах хранимых процедур, выходите туда и используйте их. Попробуйте несколько примеров и оцените достигнутые улучшения производительности - вы будете поражены! Таблица инвентаряПРОЦЕДУРА СОЗДАНИЯ sp_GetInventory@location varchar (10)КАКВЫБЕРИТЕ продукт, количествоИЗ инвентаризацииWHERE Warehouse = @location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
Я БЫ Товар Склад Количество 142 зеленая фасоль Нью-Йорк 100 214 Горох Флорида 200 825 Кукуруза Нью-Йорк 140 512 лимская фасоль Нью-Йорк 180 491 помидоры Флорида 80 379 Арбуз Флорида 85