
Хранимые процедуры
Хранимой процедурой называется одна или несколько SQL-конструкций, которые записаны в базе данных. Задача администрирования базы данных включает в себя в первую очередь распределение уровней доступа к БД. Разрешение выполнения обычных SQL-запросов большому числу пользователей может стать причиной неисправностей из-за неверного запроса или их группы. Чтобы этого избежать, разработчики базы данных могут создать ряд хранимых процедур для работы с данными и полностью запретить доступ для обычных запросов.
Такой подход при прочих равных условиях обеспечивает большую стабильность и надежность работы. Это одна из главных причин создания собственных хранимых процедур. Другие причины – быстрое выполнение, разбиение больших задач на малые модули, уменьшение нагрузки на сеть – значительно облегчают процесс разработки и обслуживания архитектуры «клиент – сервер».
Стандартные запросы к бд
Создадим в среде Management Studio новый SQL-запрос, содержащий следующий текст: exec sp_databases В результате выполнения выводится список всех баз, созданных на данном локальном сервере (рис. 4):
Рис. 4. Выполнение запроса exec sp_databases
Запрос запустил на выполнение одну из системных хранимых процедур, которая находится в базе master. Ее можно найти в списке «Хранимые процедуры» («Stored Procedures») базы. Все системные хранимые процедуры имеют префикс «sp». Обратите внимание на то, что системные процедуры в редакторе выделяются бордовым цветом и для многих из них не нужно указывать в выпадающем списке конкретную базу. Выполним еще один запрос:
exec sp_monitor
В результате ее выполнения выводится статистика текущего SQL-сервера (рис. 5).
Для вывода списка хранимых процедур в базе Northwind3 используем следующую процедуру:
USE Northwind
exec sp_stored_procedures
База Northwind содержит 1312 хранимых процедур (рис. 6), большая часть из которых системные. Для просмотра списка хранимых процедур в других базах следует вызвать для них эту же процедуру.
Рис. 6. Вывод списка хранимых процедур базы данных Northwind
Простые запросы к бд
Перейдем к созданию своих собственных процедур. Создадим новый бланк запросов и введем следующий запрос:
create procedure proc1 as
select [Код туриста], Фамилия, Имя, Отчество from Туристы
Здесь create procedure – оператор, указывающий на создание хранимой процедуры, proc1 – ее название, далее после оператора as следует обычный SQL-запрос. Квадратные скобки необходимы для указания поля таблицы, в названии которого содержится пробел. После выполнения запроса появится сообщение:
Выполнение команд успешно завершено.
The COMMAND(s) completed successfully.
Данное сообщение означает, что все сделано правильно и команда создала процедуру proc1. Убедиться в этом можно, развернув ветку «Программирование – Хранимые процедуры» в среде Management Express (рис. 7).
Для просмотра результата вызываем ее:
exec proc1
Появляется уже знакомое извлечение всех записей таблицы «Туристы» со всеми записями (рис. 8).
Из полученного результата видно, что создание содержимого хранимой процедуры не отличается ничем от создания обычного SQL-запроса. В таблице 1 приведены примеры хранимых процедур.
Рис. 8. Результат запуска процедуры proc1
Таблица 1 Примеры хранимых процедур
Операция inner join объединяет записи из двух таблиц, если поле (поля), покоторому связаны эти таблицы, содержат одинаковые значения. Общий синтаксис выглядит следующим образом:
from таблица1 inner join таблица2
on таблица1.поле1 <оператор сравнения> таблица2.поле2
Операция left join используется для создания так называемого левого внешнего соединения. С помощью этой операции выбираются все записи пер- вой (левой) таблицы, даже если они не соответствуют записям во второй (правой) таблице. Общий синтаксис имеет вид:
from таблица1 left join таблица2
on таблица1.поле1 <оператор сравнения> таблица2.поле2.