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


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

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

  • Перед началом работы выполните следующие действия.  Ограничения, Безопасность

  • Изменение хранимой процедуры с использованием: среды  SQL Server Management Studio, Transact-SQL

Перед началом

Ограничения

[В начало]

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

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

Безопасность

Разрешения

[В начало]

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

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

Можно использовать одно из следующего.

  • Среда SQL Server Management Studio

  • Transact-SQL

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

Изменение процедуры в среде Management Studio

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

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

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

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

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

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

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

Примечание по безопасностиПримечание по безопасности

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

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

Изменение процедуры в редакторе запросов

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

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

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

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

    USE AdventureWorks2012;
    GO
    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
    
  5. В меню Файл выберите команду Создать запрос.

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

    USE AdventureWorks2012;
    GO
    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
    

[В начало]

См. также

Справочник

Инструкция ALTER PROCEDURE (Transact-SQL)