Бөлісу құралы:


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

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

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

ограничения

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

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

Разрешения

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

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

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

  1. В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.

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

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

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

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

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

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

Внимание

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

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

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

  1. В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.

  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  
    

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