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

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síAzure SQL DatabasesíAzure SQL Data Warehouse síAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Modifica un procedimiento creado anteriormente por la ejecución de la instrucción CREATE PROCEDURE en SQL ServerSQL Server.Modifies a previously created procedure that was created by executing the CREATE PROCEDURE statement in SQL ServerSQL Server.

Icono de vínculo de tema convenciones de sintaxis de Transact-SQL (Transact-SQL)Topic link icon Transact-SQL Syntax Conventions (Transact-SQL)

SintaxisSyntax

-- 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 ] }  
[;]  

ArgumentosArguments

schema_nameschema_name
El nombre del esquema al que pertenece el procedimiento.The name of the schema to which the procedure belongs.

procedure_nameprocedure_name
El nombre del procedimiento que se va a cambiar.The name of the procedure to change. Los nombres de los procedimientos se deben ajustar a las reglas para los identificadores.Procedure names must comply with the rules for identifiers.

; número; number
Entero opcional existente que se usa para agrupar los procedimientos del mismo nombre, de forma que puedan quitarse juntos mediante una sola instrucción 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.

Nota

Esta característica se quitará en una versión futura de Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

@parámetro@ parameter
Parámetro del procedimiento.A parameter in the procedure. Se pueden especificar hasta 2.100 parámetros.Up to 2,100 parameters can be specified.

[ type_schema_name.[ type_schema_name. ] data_type] data_type
Es el tipo de datos del parámetro y el esquema al que pertenece.Is the data type of the parameter and the schema it belongs to.

Para obtener información acerca de las restricciones de tipo de datos, vea CREATE PROCEDURE ( Transact-SQL ) .For information about data type restrictions, see CREATE PROCEDURE (Transact-SQL).

VARYINGVARYING
Especifica el conjunto de resultados admitido como parámetro de salida.Specifies the result set supported as an output parameter. Este parámetro se genera dinámicamente por medio del procedimiento almacenado y su contenido puede variar.This parameter is constructed dynamically by the stored procedure and its contents can vary. Solo se aplica a los parámetros de cursor.Applies only to cursor parameters. Esta opción no es válida para los procedimientos CLR.This option is not valid for CLR procedures.

valor predeterminadodefault
Es un valor predeterminado para el parámetro.Is a default value for the parameter.

OUT | OUTPUTOUT | OUTPUT
Indica que se trata de un parámetro devuelto.Indicates that the parameter is a return parameter.

READONLYREADONLY
Indica que el parámetro no se puede actualizar ni modificar en el cuerpo del procedimiento.Indicates that the parameter cannot be updated or modified within the body of the procedure. Si el tipo de parámetro es un tipo con valores de tabla, se debe especificar READONLY.If the parameter type is a table-value type, READONLY must be specified.

RECOMPILERECOMPILE
Indica que Motor de base de datosDatabase Engine no almacena en la memoria caché ningún plan para este procedimiento y el procedimiento se vuelve a compilar en tiempo de ejecución.Indicates that the Motor de base de datosDatabase Engine does not cache a plan for this procedure and the procedure is recompiled at run time.

ENCRYPTIONENCRYPTION
Se aplica a: SQL Server ( SQL Server 2008SQL Server 2008 a través de SQL Server 2017SQL Server 2017) y Base de datos SQL de AzureAzure SQL Database.Applies to: SQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Indica que Motor de base de datosDatabase Engine convertirá el texto original de la instrucción ALTER PROCEDURE en un formato protegido.Indicates that the Motor de base de datosDatabase Engine will convert the original text of the ALTER PROCEDURE statement to an obfuscated format. La salida de la protección no es directamente visible en ninguna de las vistas de catálogo de SQL ServerSQL Server.The output of the obfuscation is not directly visible in any of the catalog views in SQL ServerSQL Server. Los usuarios que no disponen de acceso a las tablas del sistema o a los archivos de base de datos no pueden recuperar el texto protegido.Users that have no access to system tables or database files cannot retrieve the obfuscated text. Sin embargo, el texto estará disponible para los usuarios con privilegios que pueden tener acceso a las tablas del sistema sobre el puerto DAC o directamente a los archivos de base de datos.However, the text will be available to privileged users that can either access system tables over the DAC port or directly access database files. Además, los usuarios que pueden adjuntar un depurador al proceso del servidor pueden recuperar el procedimiento original de la memoria en tiempo de ejecución.Also, users that can attach a debugger to the server process can retrieve the original procedure from memory at runtime. Para obtener más información acerca del acceso a los metadatos del sistema, consulte Metadata Visibility Configuration.For more information about accessing system metadata, see Metadata Visibility Configuration.

Los procedimientos creados mediante esta opción no se pueden publicar como parte de la replicación de SQL ServerSQL Server.Procedures created with this option cannot be published as part of SQL ServerSQL Server replication.

Esta opción no se puede especificar para procedimientos almacenados de Common Language Runtime (CLR).This option cannot be specified for common language runtime (CLR) stored procedures.

Nota

Durante una actualización, el Motor de base de datosDatabase Engine utiliza los comentarios protegidos almacenados en sys.sql_modules para volver a crear los procedimientos.During an upgrade, the Motor de base de datosDatabase Engine uses the obfuscated comments stored in sys.sql_modules to re-create procedures.

EXECUTE ASEXECUTE AS
Especifica el contexto de seguridad en el que se debe ejecutar el procedimiento almacenado una vez que se obtiene acceso al mismo.Specifies the security context under which to execute the stored procedure after it is accessed.

Para obtener más información, vea EXECUTE AS (cláusula de Transact-SQL).For more information, see EXECUTE AS Clause (Transact-SQL).

FOR REPLICATIONFOR REPLICATION

Especifica que los procedimientos almacenados creados para la replicación no se pueden ejecutar en el suscriptor.Specifies that stored procedures that are created for replication cannot be executed on the Subscriber. Se utiliza un procedimiento almacenado creado con la opción FOR REPLICATION como un filtro de procedimiento almacenado y solo se ejecuta durante la replicación.A stored procedure created with the FOR REPLICATION option is used as a stored procedure filter and only executed during replication. No se pueden declarar los parámetros si se especifica FOR REPLICATION.Parameters cannot be declared if FOR REPLICATION is specified. Esta opción no es válida para los procedimientos CLR.This option is not valid for CLR procedures. La opción RECOMPILE no se tiene en cuenta en el caso de procedimientos creados con FOR REPLICATION.The RECOMPILE option is ignored for procedures created with FOR REPLICATION.

Nota

Esta opción no está disponible en las bases de datos independientes.This option is not available in a contained database.

{[BEGIN] sql_statement [;] [ ... n ] [END]}{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
Una o más instrucciones Transact-SQLTransact-SQL que comprenden el cuerpo del procedimiento.One or more Transact-SQLTransact-SQL statements comprising the body of the procedure. Puede usar las palabras clave BEGIN y END opcionales para incluir las instrucciones.You can use the optional BEGIN and END keywords to enclose the statements. Para obtener más información, vea las secciones prácticas recomendadas, comentarios generales y las limitaciones y restricciones de CREATE PROCEDURE ( Transact-SQL ) .For more information, see the Best Practices, General Remarks, and Limitations and Restrictions sections in CREATE PROCEDURE (Transact-SQL).

NOMBRE externo assembly_name. class_name. NombreMétodoEXTERNAL NAME assembly_name.class_name.method_name
Se aplica a: desde SQL Server 2008SQL Server 2008 hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Especifica el método de una .NET Framework.NET Framework procedimiento para hacer referencia a almacenado del ensamblado de CLR.Specifies the method of a .NET Framework.NET Framework assembly for a CLR stored procedure to reference. CLASS_NAME debe ser válido SQL ServerSQL Server identificador y debe existir como una clase en el ensamblado.class_name must be a valid SQL ServerSQL Server identifier and must exist as a class in the assembly. Si la clase tiene un nombre completo de espacio de nombres utiliza un punto (.) para separar las partes del espacio de nombres, el nombre de clase debe estar delimitado mediante corchetes ([]) o comillas ("").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 (""). El método especificado debe ser un método estático de la clase.The specified method must be a static method of the class.

De manera predeterminada, SQL ServerSQL Server no puede ejecutar código CLR.By default, SQL ServerSQL Server cannot execute CLR code. Puede crear, modificar y quitar objetos de base de datos que hagan referencia a common language runtime módulos; Sin embargo, no se puede ejecutar estas referencias en SQL ServerSQL Server hasta que habilite la opción 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. Para habilitar la opción, utilice sp_configure.To enable the option, use sp_configure.

Nota

Los procedimientos CLR no se admiten en las bases de datos independientes.CLR procedures are not supported in a contained database.

Notas generalesGeneral Remarks

Transact-SQLTransact-SQL no se pueden modificar para que sean procedimientos almacenados CLR y viceversa. stored procedures cannot be modified to be CLR stored procedures and vice versa.

ALTER PROCEDURE no cambia los permisos ni afecta a ningún procedimiento almacenado ni desencadenador dependientes.ALTER PROCEDURE does not change permissions and does not affect any dependent stored procedures or triggers. Sin embargo, la configuración de la sesión actual para QUOTED_IDENTIFIER y ANSI_NULLS se incluye en el procedimiento almacenado cuando se modifica.However, the current session settings for QUOTED_IDENTIFIER and ANSI_NULLS are included in the stored procedure when it is modified. Si la configuración es distinta de la que se estaba aplicando cuando se creó originalmente el procedimiento almacenado, el comportamiento de este último puede cambiar.If the settings are different from those in effect when stored procedure was originally created, the behavior of the stored procedure may change.

Si anteriormente se creó una definición de procedimiento mediante WITH ENCRYPTION o WITH RECOMPILE, estas opciones solo se habilitan si se incluyen en 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.

Para obtener más información sobre los procedimientos almacenados, vea CREATE PROCEDURE ( Transact-SQL ) .For more information about stored procedures, see CREATE PROCEDURE (Transact-SQL).

SeguridadSecurity

PermissionsPermissions

Requiere ALTER permiso en el procedimiento o debe pertenecer a la db_ddladmin rol fijo de base de datos.Requires ALTER permission on the procedure or requires membership in the db_ddladmin fixed database role.

EjemplosExamples

En el siguiente ejemplo se crea el procedimiento almacenado uspVendorAllInfo.The following example creates the uspVendorAllInfo stored procedure. Este procedimiento devuelve los nombres de todos los proveedores que proporciona Adventure Works CyclesAdventure Works Cycles, los productos que suministran, su solvencia y su disponibilidad.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. Después de crear este procedimiento, se modifica para devolver un conjunto de resultados diferente.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  

En el ejemplo siguiente se modifica el procedimiento almacenado uspVendorAllInfo.The following example alters the uspVendorAllInfo stored procedure. Quita la cláusula EXECUTE AS CALLER y modifica el cuerpo del procedimiento para devolver solo los proveedores que proporcionan el producto especificado.It removes the EXECUTE AS CALLER clause and modifies the body of the procedure to return only those vendors that supply the specified product. Las funciones LEFT y CASE permiten personalizar la apariencia del conjunto de resultados.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  

El conjunto de resultados es el siguiente.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)`  

Vea tambiénSee Also

CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE ( Transact-SQL ) DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
EJECUTAR AS ( Transact-SQL ) EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Procedimientos almacenados (motor de base de datos) Stored Procedures (Database Engine)
Sys.Procedures ( Transact-SQL )sys.procedures (Transact-SQL)