Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Изменяет ранее созданную процедуру, созданную выполнением CREATE PROCEDURE оператора в SQL Server.
Соглашения о синтаксисе Transact-SQL (Transact-SQL)
Синтаксис
-- Syntax for SQL Server and Azure SQL Database
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter_name [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE AS Clause ]
-- Syntax for SQL Server CLR Stored Procedure
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter_name [ type_schema_name. ] data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH EXECUTE AS Clause ]
AS { EXTERNAL NAME assembly_name.class_name.method_name }
[;]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name
[ { @parameterdata_type } [= ] ] [ ,...n ]
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }
[;]
Аргументы
schema_name
Имя схемы, которой принадлежит процедура.
procedure_name
Имя процедуры, которую нужно изменить. Имена процедур должны соответствовать правилам для идентификаторов.
;число
Существующее необязательное целое число, используемое для группировки процедур с одним именем, чтобы их можно было сбросить вместе с помощью одного DROP PROCEDURE оператора.
Примечание.
Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
@
parameter_name
Параметр в процедуре. Можно указать до 2100 параметров.
[ type_schema_name. ] data_type
Тип данных параметра и схема, которой он принадлежит.
Для информации о ограничениях по типам данных см.CREATE PROCEDURE (Transact-SQL).
VARYING
Указывает результирующий набор, поддерживаемый в качестве выходного параметра. Этот параметр формируется динамически хранимой процедурой, и его содержимое может меняться. Область применения — только параметры cursor. Этот параметр недопустим для процедур CLR.
default
Значение по умолчанию для аргумента.
OUT | ВЫПУСК
Указывает, что параметр является выходным.
READONLY
Указывает, что параметр не может быть обновлен или изменен в тексте процедуры. Если тип параметра является возвращающим табличное значение типом, то должно быть указано ключевое слово READONLY.
RECOMPILE
Указывает, что ядро СУБД не кэширует план для этой процедуры, и процедура перекомпилируется во время выполнения.
ШИФРОВАНИЕ
Область применения: SQL Server (SQL Server 2008 (10.0.x) и более поздних версий) и База данных SQL Azure.
Указывает, что ядро СУБД преобразует исходный текст ALTER PROCEDURE оператора в обфусцированный формат. Выходные данные обфускации не отображаются непосредственно в каких-либо представлениях каталога в SQL Server. Пользователи, не имеющие доступа к системным таблицам или файлам баз данных, не смогут получить скрытый текст. Однако этот текст будет доступен привилегированным пользователям, которые либо смогут обращаться к системным таблицам через порт DAC, либо будут иметь непосредственный доступ к файлам баз данных. Кроме того, пользователи, имеющие право на подключение отладчика к серверному процессу, могут получить исходный текст процедуры из памяти во время выполнения. Дополнительные сведения о доступе к метаданным системы см. в статье Настройка видимости метаданных.
Процедуры, созданные с помощью этого параметра, не могут быть опубликованы в рамках репликации SQL Server.
Этот параметр не может быть указан в хранимой процедуре среды CLR.
Примечание.
Во время обновления ядро СУБД использует скрытые комментарии, хранящиеся в sys.sql_modules, для повторного создания процедур.
EXECUTE AS
Определяет контекст безопасности, в котором должна выполняться хранимая процедура при обращении к ней.
Дополнительные сведения см. в предложении EXECUTE AS (Transact-SQL).
ДЛЯ РЕПЛИКАЦИИ
Указывает, что хранимые процедуры, созданные для репликации, не могут выполняться на подписчике. Хранимая процедура, созданная с аргументом FOR REPLICATION, используется в качестве фильтра и выполняется только в процессе репликации. Параметры не могут быть объявлены, если указан параметр FOR REPLICATION. Этот параметр недопустим для процедур CLR. Параметр RECOMPILE не учитывается для процедур, созданных с параметром FOR REPLICATION.
Примечание.
Этот параметр недоступен в автономной базе данных.
{ [ BEGIN ] sql_statement [;] [ ... n ] [ END ] }
Одна или несколько инструкций Transact-SQL, составляющих текст процедуры. Инструкции можно заключить в необязательные ключевые слова BEGIN и END. Для получения дополнительной информации смотрите разделы «Лучшие практики, общие замечания» и «Ограничения и ограничения» в CREATE PROCEDURE (Transact-SQL).
ВНЕШНЕЕ НАЗВАНИЕ assembly_name.class_name.method_name
Применимо: SQL Server 2008 (10.0.x) и более поздних версий.
Указывает метод сборки платформа .NET Framework для хранимой процедуры CLR для ссылки. class_name должен быть допустимым идентификатором SQL Server и должен существовать в качестве класса в сборке. Если для класса через точку (.) указано пространство имен, имя класса должно быть выделено квадратными скобками ([]) или кавычками (""). Указанный метод класса должен быть статическим.
По умолчанию SQL Server не может выполнять код CLR. Можно создавать, изменять и удалять объекты базы данных, ссылающиеся на модули среды CLR; Однако эти ссылки нельзя выполнить в SQL Server, пока не включите параметр clr. Для включения параметра используйте хранимую процедуру sp_configure.
Примечание.
Процедуры CLR не поддерживаются в автономной базе данных.
Общие замечания
Хранимые процедуры Transact-SQL нельзя преобразовать в хранимые процедуры CLR, и наоборот.
ALTER PROCEDURE не меняет права и не влияет на какие-либо зависимые хранимые процедуры или триггеры. Однако текущие настройки сессии для QUOTED_IDENTIFIER и ANSI_NULLS включаются в хранящую процедуру при её изменении. Если при создании хранимой процедуры использовались другие значения параметров, ее поведение может измениться.
Если предыдущее определение процедуры было создано с использованием С ШИФРОВАНИЕМ или С ПЕРЕКОМПИЛЯЦИЕЙ, эти опции включаются только в том случае, если они включены в ALTER PROCEDURE.
Для получения дополнительной информации о хранящихся процедурах см. CREATE PROCEDURE (Transact-SQL).
Безопасность
Разрешения
Требуется разрешение ALTER на процедуру или членство в предопределенной роли базы данных db_ddladmin.
Примеры
В следующем примере создается хранимая процедура 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
В следующем примере изменяется хранимая процедура uspVendorAllInfo. Он удаляет EXECUTE AS оговорку CALLER и изменяет основную часть процедуры, чтобы возвращать только тех поставщиков, которые поставляют указанный продукт. Содержимое результирующего набора определяется при помощи функций LEFT и CASE.
USE AdventureWorks2022;
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
Вот результирующий набор.
Vendor Product name Rating Availability
-------------------- ------------- ------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)`