ALTER PROCEDURE (Transact-SQL)ALTER PROCEDURE (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Изменяет ранее созданную процедуру с помощью инструкции CREATE PROCEDURE в SQL ServerSQL Server.Modifies a previously created procedure that was created by executing the CREATE PROCEDURE statement in SQL ServerSQL Server.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL (Transact-SQL)Topic link icon Transact-SQL Syntax Conventions (Transact-SQL)

СинтаксисSyntax

-- Syntax for SQL Server and Azure SQL Database
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]   
    [ { @parameter [ 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 [ 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 SQL Data Warehouse and Parallel Data Warehouse  
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name  
    [ { @parameterdata_type } [= ] ] [ ,...n ]  
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }  
[;]  

АргументыArguments

schema_nameschema_name
Имя схемы, которой принадлежит процедура.The name of the schema to which the procedure belongs.

procedure_nameprocedure_name
Имя процедуры, которую нужно изменить.The name of the procedure to change. Имена процедур должны соответствовать правилам для идентификаторов.Procedure names must comply with the rules for identifiers.

; number; number
Существующий необязательный аргумент целочисленного типа, который применяется для объединения процедур с одинаковым именем и позволяет удалять их одновременно при помощи инструкции DROP PROCEDURE.An existing optional integer that is used to group procedures of the same name so that they can be dropped together by using one DROP PROCEDURE statement.

Примечание

Этот компонент находится в режиме обслуживания и может быть удален в будущей версии Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

@ parameter@ parameter
Параметр в процедуре.A parameter in the procedure. Можно указать до 2100 параметров.Up to 2,100 parameters can be specified.

[ type_schema_name.[ type_schema_name. ] data_type] data_type
Тип данных параметра и схема, которой он принадлежит.Is the data type of the parameter and the schema it belongs to.

Дополнительные сведения об ограничениях типов данных см. в разделе CREATE PROCEDURE (Transact-SQL).For information about data type restrictions, see CREATE PROCEDURE (Transact-SQL).

VARYINGVARYING
Указывает результирующий набор, поддерживаемый в качестве выходного параметра.Specifies the result set supported as an output parameter. Этот параметр формируется динамически хранимой процедурой, и его содержимое может меняться.This parameter is constructed dynamically by the stored procedure and its contents can vary. Область применения — только аргументы курсора.Applies only to cursor parameters. Этот параметр недопустим для процедур CLR.This option is not valid for CLR procedures.

defaultdefault
Значение по умолчанию для аргумента.Is a default value for the parameter.

OUT | OUTPUTOUT | OUTPUT
Указывает, что параметр является выходным.Indicates that the parameter is a return parameter.

READONLYREADONLY
Указывает, что параметр не может быть обновлен или изменен в тексте процедуры.Indicates that the parameter cannot be updated or modified within the body of the procedure. Если тип параметра является возвращающим табличное значение типом, то должно быть указано ключевое слово READONLY.If the parameter type is a table-value type, READONLY must be specified.

RECOMPILERECOMPILE
Указывает, что компонент Компонент Database EngineDatabase Engine не кэширует план этой процедуры и она перекомпилируется во время выполнения.Indicates that the Компонент Database EngineDatabase Engine does not cache a plan for this procedure and the procedure is recompiled at run time.

ENCRYPTIONENCRYPTION
Область применения: SQL Server (с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017), База данных SQL AzureAzure SQL Database.Applies to: SQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and База данных SQL AzureAzure SQL Database.

Показывает, что компонент Компонент Database EngineDatabase Engine выполнит затемнение исходного текста инструкции ALTER PROCEDURE.Indicates that the Компонент Database EngineDatabase Engine will convert the original text of the ALTER PROCEDURE statement to an obfuscated format. Результат запутывания не виден непосредственно ни в одном представлении каталога SQL ServerSQL Server.The output of the obfuscation is not directly visible in any of the catalog views in SQL ServerSQL Server. Пользователи, не имеющие доступа к системным таблицам или файлам баз данных, не смогут получить скрытый текст.Users that have no access to system tables or database files cannot retrieve the obfuscated text. Однако этот текст будет доступен привилегированным пользователям, которые либо смогут обращаться к системным таблицам через порт DAC, либо будут иметь непосредственный доступ к файлам баз данных.However, the text will be available to privileged users that can either access system tables over the DAC port or directly access database files. Кроме того, пользователи, имеющие право на подключение отладчика к серверному процессу, могут получить исходный текст процедуры из памяти во время выполнения.Also, users that can attach a debugger to the server process can retrieve the original procedure from memory at runtime. Дополнительные сведения о доступе к метаданным системы см. в статье Настройка видимости метаданных.For more information about accessing system metadata, see Metadata Visibility Configuration.

Процедуры, созданные с этим аргументом, не могут быть опубликованы как часть репликации SQL ServerSQL Server.Procedures created with this option cannot be published as part of SQL ServerSQL Server replication.

Этот параметр не может быть указан в хранимой процедуре среды CLR.This option cannot be specified for common language runtime (CLR) stored procedures.

Примечание

Во время обновления компонент Компонент Database EngineDatabase Engine использует затемненные комментарии, которые хранятся в таблице sys.sql_modules для повторного создания зашифрованных процедур.During an upgrade, the Компонент Database EngineDatabase Engine uses the obfuscated comments stored in sys.sql_modules to re-create procedures.

EXECUTE ASEXECUTE AS
Определяет контекст безопасности, в котором должна выполняться хранимая процедура при обращении к ней.Specifies the security context under which to execute the stored procedure after it is accessed.

Дополнительные сведения см. в разделе Предложение EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS Clause (Transact-SQL).

FOR REPLICATIONFOR REPLICATION

Указывает, что хранимые процедуры, созданные для репликации, не могут выполняться на подписчике.Specifies that stored procedures that are created for replication cannot be executed on the Subscriber. Хранимая процедура, созданная с аргументом FOR REPLICATION, используется в качестве фильтра и выполняется только в процессе репликации.A stored procedure created with the FOR REPLICATION option is used as a stored procedure filter and only executed during replication. Параметры не могут быть объявлены, если указан параметр FOR REPLICATION.Parameters cannot be declared if FOR REPLICATION is specified. Этот параметр недопустим для процедур CLR.This option is not valid for CLR procedures. Параметр RECOMPILE не учитывается для процедур, созданных с параметром FOR REPLICATION.The RECOMPILE option is ignored for procedures created with FOR REPLICATION.

Примечание

Этот параметр недоступен в автономной базе данных.This option is not available in a contained database.

{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
Одна или несколько инструкций Transact-SQLTransact-SQL, составляющих текст процедуры.One or more Transact-SQLTransact-SQL statements comprising the body of the procedure. Инструкции можно заключить в необязательные ключевые слова BEGIN и END.You can use the optional BEGIN and END keywords to enclose the statements. Дополнительные сведения см. в подразделах "Рекомендации", "Общие замечания" и "Ограничения" раздела CREATE PROCEDURE (Transact-SQL).For more information, see the Best Practices, General Remarks, and Limitations and Restrictions sections in CREATE PROCEDURE (Transact-SQL).

EXTERNAL NAME assembly_name.class_name.method_nameEXTERNAL NAME assembly_name.class_name.method_name
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Указывает метод сборки .NET Framework.NET Framework для хранимой процедуры CLR, на которую создается ссылка.Specifies the method of a .NET Framework.NET Framework assembly for a CLR stored procedure to reference. Аргумент class_name должен быть допустимым идентификатором SQL ServerSQL Server и существовать как класс в сборке.class_name must be a valid SQL ServerSQL Server identifier and must exist as a class in the assembly. Если для класса через точку (.) указано пространство имен, имя класса должно быть выделено квадратными скобками ([]) или кавычками ("").If the class has a namespace-qualified name uses a period (.) to separate namespace parts, the class name must be delimited by using brackets ([]) or quotation marks (""). Указанный метод класса должен быть статическим.The specified method must be a static method of the class.

По умолчанию SQL ServerSQL Server не производит выполнение кода CLR.By default, SQL ServerSQL Server cannot execute CLR code. Можно создавать, изменять и удалять объекты базы данных со ссылками на модули среды CLR, но SQL ServerSQL Server не выполняет их до тех пор, пока не будет включен параметр clr enabled.You can create, modify, and drop database objects that reference common language runtime modules; however, you cannot execute these references in SQL ServerSQL Server until you enable the clr enabled option. Для включения параметра используйте хранимую процедуру sp_configure.To enable the option, use sp_configure.

Примечание

Процедуры CLR не поддерживаются в автономной базе данных.CLR procedures are not supported in a contained database.

Общие замечанияGeneral Remarks

Хранимые процедуры Transact-SQLTransact-SQL нельзя преобразовать в хранимые процедуры CLR, и наоборот.Transact-SQLTransact-SQL stored procedures cannot be modified to be CLR stored procedures and vice versa.

Инструкция ALTER PROCEDURE не изменяет разрешения и не влияет на хранимые процедуры и триггеры.ALTER PROCEDURE does not change permissions and does not affect any dependent stored procedures or triggers. Тем не менее при изменении в хранимую процедуру включаются текущие значения для параметров сеанса QUOTED_IDENTIFIER и ANSI_NULLS.However, the current session settings for QUOTED_IDENTIFIER and ANSI_NULLS are included in the stored procedure when it is modified. Если при создании хранимой процедуры использовались другие значения параметров, ее поведение может измениться.If the settings are different from those in effect when stored procedure was originally created, the behavior of the stored procedure may change.

Если предыдущее определение процедуры было создано с параметрами WITH ENCRYPTION или WITH RECOMPILE, эти параметры будут включены только в том случае, если они указаны в инструкции ALTER PROCEDURE.If a previous procedure definition was created using WITH ENCRYPTION or WITH RECOMPILE, these options are enabled only if they are included in ALTER PROCEDURE.

Дополнительные сведения о хранимых процедурах см. в статье CREATE PROCEDURE (Transact-SQL).For more information about stored procedures, see CREATE PROCEDURE (Transact-SQL).

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

РазрешенияPermissions

Требуется разрешение ALTER на процедуру или членство в предопределенной роли базы данных db_ddladmin.Requires ALTER permission on the procedure or requires membership in the db_ddladmin fixed database role.

ПримерыExamples

В следующем примере создается хранимая процедура uspVendorAllInfo.The following example creates the uspVendorAllInfo stored procedure. Эта хранимая процедура возвращает имена всех поставщиков, которые содержатся в базе данных Компания Adventure Works CyclesAdventure Works Cycles, товары, которые они производят, оценку кредитоспособности и доступность.This procedure returns the names of all the vendors that supply Компания Adventure Works CyclesAdventure Works Cycles, the products they supply, their credit ratings, and their availability. После создания процедура изменяется и возвращает другой результирующий набор.After this procedure is created, it is then modified to return a different result set.

  
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.The following example alters the uspVendorAllInfo stored procedure. Здесь удаляется предложение EXECUTE AS CALLER и изменяется текст процедуры, чтобы возвращать только поставщиков, предлагающих указанный товар.It removes the EXECUTE AS CALLER clause and modifies the body of the procedure to return only those vendors that supply the specified product. Содержимое результирующего набора определяется при помощи функций LEFT и CASE.The LEFT and CASE functions customize the appearance of the result set.

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  
  

Ниже приводится результирующий набор.Here is the result set.

Vendor               Product name  Rating    Availability  
-------------------- ------------- -------   ------------  
Proseware, Inc.      LL Crankarm   Average   No  
Vision Cycles, Inc.  LL Crankarm   Superior  Yes  
(2 row(s) affected)`  

См. такжеSee Also

CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE (Transact-SQL) DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
EXECUTE AS (Transact-SQL) EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Хранимые процедуры (ядро СУБД) Stored Procedures (Database Engine)
sys.procedures (Transact-SQL)sys.procedures (Transact-SQL)