Изменение хранимой процедуры
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL Azure Synapse Analytics Analytics Platform System (PDW) в Microsoft Fabric
В этой статье описывается изменение хранимой процедуры в 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, выполните следующие действия:
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Последовательно разверните узел Базы данных, базу данных, которой принадлежит процедура, и узел Программирование.
Разверните Хранимые процедуры, щелкните правой кнопкой мыши изменяемую процедуру, затем выберите Изменить.
Изменение текста хранимой процедуры.
Для проверки синтаксиса выберите пункт Выполнить анализ в меню Запрос.
Чтобы сохранить изменения определения процедуры, выберите пункт Выполнить в меню Запрос.
Чтобы сохранить обновленное определение процедуры в виде скрипта Transact-SQL, в меню "Файл " выберите "Сохранить как". Примите предложенное имя файла или замените его новым, затем нажмите кнопку Сохранить.
Внимание
Проверяйте все данные, вводимые пользователем. Не включайте их в сценарий, не выполнив проверку. Никогда не выполняйте команду, построенную на основании непроверенных пользовательских входных данных. Неоцененные входные данные пользователя делают базу данных уязвимой для типа эксплойтов, называемых атакой внедрения внедрения SQL. Дополнительные сведения см. в статье о внедрении SQL.
Использование Transact-SQL
Чтобы изменить процедуру с помощью команд T-SQL, выполните следующие действия:
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура. Также можно выбрать необходимую базу данных из списка доступных баз данных на панели инструментов. В данном примере выберите базу данных
AdventureWorks2022
.В меню Файл выберите Создать запрос.
Скопируйте и вставьте следующий пример в редактор запросов. В примере создается
Purchasing.uspVendorAllInfo
процедура, которая возвращает имена всех поставщиков в базе данных Adventure Works Cycles, продукты, которые они предоставляют, их кредитные рейтинги и их доступность.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
В меню Файл выберите Создать запрос.
Скопируйте и вставьте следующий пример в редактор запросов. В следующем примере изменяется процедура
uspVendorAllInfo
. ПредложениеEXECUTE AS CALLER
удаляется, и изменяется текст процедуры, чтобы возвращать только поставщиков, предлагающих указанный товар. Содержимое результирующего набора определяется при помощи функцийLEFT
иCASE
.Внимание
При удалении и повторном создании хранимой процедуры происходит удаление разрешений, которые были явно предоставлены хранимой процедуре. Используйте
ALTER
для изменения существующей хранимой процедуры.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
Чтобы сохранить изменения определения процедуры, выберите пункт Выполнить в меню Запрос.
Чтобы сохранить обновленное определение процедуры в виде скрипта Transact-SQL, в меню "Файл " выберите "Сохранить как". Примите предложенное имя файла или замените его новым, затем нажмите кнопку Сохранить.
Чтобы выполнить измененную хранимую процедуру, выполните следующий пример.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO