Создание хранимой процедуры

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

В этой статье описывается, как создать хранимую процедуру SQL Server с помощью SQL Server Management Studio и с помощью инструкции Transact-SQL CREATE PROCEDURE.

Разрешения

Для выполнения этой инструкции требуется разрешение CREATE PROCEDURE в отношении базы данных и разрешение ALTER в отношении схемы, в которой создается процедура.

Создание хранимой процедуры

Для создания хранимой процедуры можно использовать пользовательский интерфейс SQL Server Management Studio (SSMS) или Transact-SQL в окне запроса SSMS. Всегда используйте последнюю версию SSMS.

Примечание.

В примере хранимой процедуры в этой статье используется пример AdventureWorksLT2022 базы данных (SQL Server) или AdventureWorksLT (База данных SQL Azure). Инструкции по получении и использовании примеров AdventureWorksLT баз данных см. в примерах баз данных AdventureWorks.

Использование SQL Server Management Studio

Чтобы создать хранимую процедуру в SSMS, выполните приведенные ниже действия.

  1. В обозреватель объектов подключитесь к экземпляру SQL Server или База данных SQL Azure.

    Дополнительные сведения см. в следующих кратких руководствах.

  2. Разверните экземпляр и разверните базу данных.

  3. Разверните нужную базу данных и разверните узел Programmability.

  4. Щелкните правой кнопкой мыши хранимые процедуры и выберите "Новая>хранимая процедура". Откроется новое окно запроса с шаблоном для хранимой процедуры.

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

  5. В меню Запрос выберите пункт Задание значений для параметров шаблона.

  6. В диалоговом окне "Указать значения для параметров шаблона" укажите следующие сведения для полей "Значение".

    • Автор: замените Name своим именем.
    • Дата создания: введите текущую дату.
    • Описание. Кратко опишите, что делает процедура.
    • Procedure_Name. Замените ProcedureName новым именем хранимой процедуры.
    • @Param1. Замените @p1 имя первого параметра, например @ColumnName1.
    • @Datatype_For_Param1. По мере необходимости замените int тип данных первого параметра, например nvarchar(50).
    • Default_Value_For_Param1. При необходимости замените 0 значением по умолчанию первого параметра или NULL.
    • @Param2. Замените @p2 на имя второго параметра, например @ColumnName2.
    • @Datatype_For_Param2: замените int тип данных второго параметра, например nvarchar(50).
    • Default_Value_For_Param2. При необходимости замените 0 значением по умолчанию второго параметра или NULL.

    На следующем снимку экрана показано готовое диалоговое окно для примера хранимой процедуры:

    Снимок экрана: диалоговое окно

  7. Нажмите ОК.

  8. В Редактор запросов замените инструкцию SELECT запросом на процедуру.

    В следующем коде показана завершенная инструкция CREATE PROCEDURE для примера хранимой процедуры:

    -- =======================================================
    -- Create Stored Procedure Template for Azure SQL Database
    -- =======================================================
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:      My Name
    -- Create Date: 01/23/2024
    -- Description: Returns the customer's company name.
    -- =============================================
    CREATE PROCEDURE SalesLT.uspGetCustomerCompany
    (
        -- Add the parameters for the stored procedure here
        @LastName nvarchar(50) = NULL,
        @FirstName nvarchar(50) = NULL
    )
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON
    
        -- Insert statements for procedure here
        SELECT FirstName, LastName, CompanyName
           FROM SalesLT.Customer
           WHERE FirstName = @FirstName AND LastName = @LastName;
    END
    GO
    
  9. Для проверки синтаксиса выберите пункт Выполнить анализ в меню Запрос. Исправьте все ошибки.

  10. Выберите "Выполнить" на панели инструментов. Процедура создается как объект в базе данных.

  11. Чтобы просмотреть новую процедуру, указанную в обозреватель объектов, щелкните правой кнопкой мыши хранимые процедуры и выберите "Обновить".

Чтобы выполнить процедуру, выполните следующую команду:

  1. В обозреватель объектов щелкните правой кнопкой мыши имя хранимой процедуры и выберите "Выполнить хранимую процедуру".

  2. В окне "Выполнение процедуры" введите значения для всех параметров и нажмите кнопку "ОК". Подробные инструкции см. в разделе "Выполнение хранимой процедуры".

    Например, чтобы выполнить SalesLT.uspGetCustomerCompany пример процедуры, введите Cannon для параметра @LastName и Криса для параметра @FirstName, а затем нажмите кнопку "ОК". Хранимая процедура выполняется и возвращает FirstName Крис, LastName Кэннон и CompanyName открытые спортивные товары.

Внимание

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

Использование Transact-SQL

Чтобы создать процедуру в Редактор запросов SSMS, выполните следующие действия.

  1. В SSMS подключитесь к экземпляру SQL Server или База данных SQL Azure.

  2. Выберите "Создать запрос " на панели инструментов.

  3. Введите следующий код в окно запроса, заменив <ProcedureName>имена и типы данных любых параметров и инструкцию SELECT собственными значениями.

    CREATE PROCEDURE <ProcedureName>
       @<ParameterName1> <data type>,
       @<ParameterName2> <data type>
    AS   
    
       SET NOCOUNT ON;
       SELECT <your SELECT statement>;
    GO
    

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

    CREATE PROCEDURE SalesLT.uspGetCustomerCompany1
        @LastName nvarchar(50),
        @FirstName nvarchar(50)
    AS   
    
        SET NOCOUNT ON;
        SELECT FirstName, LastName, CompanyName
        FROM SalesLT.Customer
        WHERE FirstName = @FirstName AND LastName = @LastName;
    GO
    
  4. Выберите "Выполнить" на панели инструментов, чтобы выполнить запрос. Создается хранимая процедура.

  5. Чтобы запустить хранимую процедуру, введите инструкцию EXECUTE в новом окне запроса, указав значения для любых параметров, а затем нажмите кнопку "Выполнить". Подробные инструкции см. в разделе "Выполнение хранимой процедуры".