Поделиться через


Практическое руководство. Создание хранимых процедур и пользовательских функций

В обозревателе сервера можно создавать хранимые процедуры.При помощи хранимых процедур можно определять сложные бизнес-правила, управлять изменением данных, ограничивать доступ с использованием разрешений доступа, обеспечивать целостность транзакций и в целом вести работу с базой данных в соответствии с потребностями приложения.

В Microsoft SQL Server 2000 и более поздних версиях в обозревателе сервера также доступно создание пользовательских функций.Пользовательская функция представляет собой процедуру, инкапсулирующую полезную логику для использования в других запросах.В то время как представления ограничены одной инструкцией SELECT, пользовательские функции могут содержать несколько инструкций SELECT и обеспечивать более эффективную логику, чем та, что доступна в представлениях.

Пользовательские функции всегда возвращают значение.В зависимости от типа возвращаемого значения пользовательские функции распределяются по трем категориям:

  • скалярная функция А определяемая пользователем функция может возвращать скалярное значение как целое число или отметка времени.Если функция возвращает скалярное значение, ее можно использовать в запросе везде, где может быть указано имя столбца.

  • встроенная функция Если определяемая пользователем функция содержит единственную инструкцию выборки и это выписка быть обновляемым, а также обновляемый табличный результат, возвращаемый функцией.Такие функции называются встроенными.Если встроенная функция возвращает таблицу, эту функцию можно использовать в предложении FROM другого запроса.Дополнительные сведения см. в разделе Практическое руководство. Создание запросов с использованием других источников, помимо таблиц.

  • Функции с табличным значением Если определяемая пользователем функция содержит более одной инструкции выборки или инструкцию, которая содержит образец невозможно обновить, а табличный результат, возвращаемый этой функцией не является обновляемым.Если табличная функция возвращает таблицу, эту функцию можно использовать в предложении FROM другого запроса.

ПримечаниеПримечание

В следующих ниже примерах "dbo" — это акроним владельца базы данных, который используется для определения имени хранимой процедуры и пользовательской функции.Владелец базы данных является пользователем, который имеет неявные разрешения на выполнение любых действий в базе данных.Любой объект, созданный любым членом роли sysadmin, автоматически принадлежит dbo.В следующих ниже примерах включен квалификатор имени "dbo".

ПримечаниеПримечание

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Чтобы создать хранимую процедуру

  1. В обозревателе сервера щелкните правой кнопкой мыши папку Хранимые процедуры или любую хранимую процедуру в этой папке.

  2. В контекстном меню выберите команду Добавить новую хранимую процедуру.

    Будет создана новая хранимая процедура, имеющая следующий каркас инструкций SQL:

    CREATE PROCEDURE dbo.StoredProcedure1
    /*
       (
          @parameter1 datatype = default value,
          @parameter2 datatype OUTPUT
       )
    */
    AS
       /* SET NOCOUNT ON */
       RETURN
    
  3. Можно заменить переменную StoredProcedure1 в первой строке на имя новой процедуры.Например, можно указать имя MyProcedure:

    CREATE PROCEDURE dbo.MyProcedure
    
    ПримечаниеПримечание

    Хранимые процедуры должны иметь уникальные имена.При выборе имени, которое уже присвоено другой хранимой процедуре, будет выведено сообщение об ошибке, предупреждающее, что хранимая процедура с таким именем уже существует.

  4. Введите оставшийся текст процедуры в SQL.

    Дополнительные сведения о хранимых процедурах и примеры см. в документации по соответствующему серверу баз данных.При использовании Microsoft SQL Server см. в разделе ", чтобы СОЗДАТЬ ПРОЦЕДУРУ" в книгах SQL Server, подключенных.

Чтобы создать пользовательскую функцию

  1. В обозревателе сервера щелкните правой кнопкой мыши папку Функции или любую функцию в этой папке.

  2. Установите указатель мыши на пункте Добавить новый, а затем выберите в контекстном меню пункт Встроенная функция, Табличная функция или Скалярная функция.

    ПримечаниеПримечание

    Нельзя изменить каркас инструкций SQL новой функции в соответствии другим типом функции и сохранить результаты работы.Например, если начато создание встроенной функции, нельзя изменить инструкции SQL в соответствии с правилами скалярной функции.Процедура сохранения завершится неудачей.

    Будет создана новая пользовательская функция с использованием каркаса инструкций SQL:Например, при выборе параметра Скалярная функция будет создан следующий каркас инструкций SQL:

    CREATE FUNCTION dbo.Function1
       (
       /*
       @parameter1 datatype = default value,
       @parameter2 datatype
       */
       )
    RETURNS /* datatype */
    AS
       BEGIN
          /* sql statement ... */
       RETURN /* value */
       END
    
  3. Можно заменить Function1 в первой строке именем новой функции.Например, можно указать имя MyFunction:

    CREATE FUNCTION dbo.MyFunction
    
    ПримечаниеПримечание

    Пользовательские функции должны иметь уникальные имена.При выборе имени, которое уже присвоено другой функции, будет выведено сообщение об ошибке, предупреждающее, что функция с таким именем уже существует.

  4. Введите оставшийся текст функции в SQL.

ПримечаниеПримечание

Если в контекстном меню отсутствуют нужные параметры, это может означать, что используемая версия Visual Studio не поддерживает данную возможность.Дополнительные сведения см. в разделе Выпуски визуальных инструментов для баз данных.

Дополнительные сведения о пользовательских функциях и примеры см. в документации по соответствующему серверу баз данных.При использовании Microsoft SQL Server см. в разделе "create function" в книгах SQL Server, подключенных.

См. также

Основные понятия

Выражения в запросах

Другие ресурсы

Работа с хранимыми процедурами и пользовательскими функциями