FAQ по Базам Данных
(Форум на Исходниках.Ru)


Простейшая хранимая процедура

Для начала неплохо бы понять, для чего вообще нужны хранимые процедуры. Допустим, если сервер БД, в котором хранятся данные, используемые в формулах на клиенте. Оператору, который работает на клиенте, сами эти данные не нужны, ему нужен готовый результат из формулы. То есть что же это получается? - Клиент получает данные из БД и у себя их обрабатывает? А если клиентов много, формул в них еще больше, а данных в базе - вообще море, то сервер и сеть испытывают серьездные перегрузки. Вот поэтому и были созданы хранимые процедуры,  позволяющие обрабатывать данные еще на сервере, а клиенту передавать готовый результат. Кроме того, так как часть кода программы сосредотачивается на сервере в виде хранимых процедур, не нужно будет править клиентов при каждом обновлении.

А теперь - ближе к делу: запускаем Enterprise Manager, выбираем нашу БД, а в ней, в разделе Stored Procedures -New Stored Procedure... Сервер сгенерирует "болванку" примерно такого содержания:
CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS
Здесь нужно указать владельца процедуры вместо OWNER (достаточно указать dbo), имя процедуры (вместо PROCEDURE NAME). Вот что написал я:
CREATE PROCEDURE [dbo].[MY_PROC] AS
    SELECT * FROM Table1
Если теперь выполнить запрос
EXEC MY_PROC
то выполнится наша процедура, и соответственно будут выведены результаты SELECT'а.
А можно ли передавать параметры в процедуру?
Можно! Вот так:
CREATE PROCEDURE [dbo].[MY_PROC]
    @name char(50)
    AS
    exec('SELECT * FROM '+@name+'')
Что произойдет при вызове EXEC MY_PROC 'Table1' я думаю понятно всем :) - выполнится выборка из Table1. Но ведь можно указать и другую таблицу? ;)

Если нужно передать несколько параметров, укажите их через запятую -
@name char(50), @id int


Содержание