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

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

ограничения

Хранимые процедуры Transact-SQL нельзя преобразовать в хранимые процедуры CLR, и наоборот.

Если предыдущее определение процедуры было создано с параметрами WITH ENCRYPTION или WITH RECOMPILE, эти параметры будут включены только в случае, если они указаны в инструкции ALTER PROCEDURE.

Permissions

Необходимо разрешение ALTER PROCEDURE на процедуру.

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

Чтобы изменить процедуру в SQL Server Management Studio, выполните следующие действия:

  1. В обозревателе объектов подключитесь к экземпляру Компонент Database Engine и разверните его.

  2. Последовательно разверните узел Базы данных, базу данных, которой принадлежит процедура, и узел Программирование.

  3. Разверните Хранимые процедуры, щелкните правой кнопкой мыши изменяемую процедуру, затем выберите Изменить.

  4. Изменение текста хранимой процедуры.

  5. Для проверки синтаксиса выберите пункт Выполнить анализ в меню Запрос.

  6. Чтобы сохранить изменения определения процедуры, выберите пункт Выполнить в меню Запрос.

  7. Чтобы сохранить обновленное определение процедуры в виде скрипта Transact-SQL, в меню Файл выберите Команду Сохранить как. Примите предложенное имя файла или замените его новым, затем нажмите кнопку Сохранить.

Важно!

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

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

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

  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine и разверните его.

  2. Разверните узел Базы данных, разверните базу данных, в которой находится процедура. Также можно выбрать необходимую базу данных из списка доступных баз данных на панели инструментов. В данном примере выберите базу данных AdventureWorks2022 .

  3. В меню Файл выберите Создать запрос.

  4. Скопируйте и вставьте следующий пример в редактор запросов. В этом примере будет создана процедура uspVendorAllInfo , которая возвращает для всех поставщиков в базе данных Компания Adventure Works Cycles их имена, поставляемую продукцию, кредитные рейтинги и доступность.

    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO   
    

    Важно!

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

  5. В меню Файл выберите Создать запрос.

  6. Скопируйте и вставьте следующий пример в редактор запросов. В следующем примере изменяется процедура uspVendorAllInfo . Предложение EXECUTE AS CALLER удаляется, и изменяется текст процедуры, чтобы возвращать только поставщиков, предлагающих указанный товар. Содержимое результирующего набора определяется при помощи функций LEFT и CASE.

    ALTER PROCEDURE Purchasing.uspVendorAllInfo  
        @Product varchar(25)   
    AS  
        SET NOCOUNT ON;  
        SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name',   
        'Rating' = CASE v.CreditRating   
            WHEN 1 THEN 'Superior'  
            WHEN 2 THEN 'Excellent'  
            WHEN 3 THEN 'Above average'  
            WHEN 4 THEN 'Average'  
            WHEN 5 THEN 'Below average'  
            ELSE 'No rating'  
            END  
        , Availability = CASE v.ActiveFlag  
            WHEN 1 THEN 'Yes'  
            ELSE 'No'  
            END  
        FROM Purchasing.Vendor AS v   
        INNER JOIN Purchasing.ProductVendor AS pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product AS p   
          ON pv.ProductID = p.ProductID   
        WHERE p.Name LIKE @Product  
        ORDER BY v.Name ASC;  
    GO  
    
  7. Чтобы сохранить изменения определения процедуры, выберите пункт Выполнить в меню Запрос.

  8. Чтобы сохранить обновленное определение процедуры в виде скрипта Transact-SQL, в меню Файл выберите Команду Сохранить как. Примите предложенное имя файла или замените его новым, затем нажмите кнопку Сохранить.

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

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO  
    

Следующие шаги