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

DIESES THEMA GILT FÜR: jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Ändert eine zuvor durch Ausführen der CREATE PROCEDURE-Anweisung erstellte Prozedur in SQL ServerSQL Server.Modifies a previously created procedure that was created by executing the CREATE PROCEDURE statement in SQL ServerSQL Server.

Symbol für Themenlink Transact-SQL-Syntaxkonventionen (Transact-SQL)Topic link icon Transact-SQL Syntax Conventions (Transact-SQL)

SyntaxSyntax

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

ArgumenteArguments

schema_nameschema_name
Der Name des Schemas, zu dem die Prozedur gehört.The name of the schema to which the procedure belongs.

procedure_nameprocedure_name
Der Name der Prozedur zu ändern.The name of the procedure to change. Prozedurnamen müssen den Regeln für Bezeichnerentsprechen.Procedure names must comply with the rules for identifiers.

; Anzahl; number
Eine vorhandene optionale ganze Zahl ist, die zum Gruppieren von Prozeduren mit dem gleichen Namen verwendet, sodass sie zusammen mit einer DROP PROCEDURE-Anweisung gelöscht werden können.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.

Hinweis

Dieses Feature wird in einer künftigen Version von Microsoft SQL Server entfernt.This feature will be removed in a future version of Microsoft SQL Server. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

@Parameter@ parameter
Ein Parameter in der Prozedur.A parameter in the procedure. Es können bis zu 2.100 Parameter angegeben werden.Up to 2,100 parameters can be specified.

[ Type_schema_name.[ type_schema_name. ] Data_type] data_type
Der Datentyp des Parameters und des Schemas, zu dem dieser gehört.Is the data type of the parameter and the schema it belongs to.

Informationen zu datentypeinschränkungen finden Sie unter CREATE PROCEDURE ( Transact-SQL ) .For information about data type restrictions, see CREATE PROCEDURE (Transact-SQL).

VARYINGVARYING
Gibt das als Ausgabeparameter unterstützte Resultset an.Specifies the result set supported as an output parameter. Dieser Parameter wird durch die gespeicherte Prozedur dynamisch erstellt, und sein Inhalt kann variieren.This parameter is constructed dynamically by the stored procedure and its contents can vary. Gilt nur für cursor-Parameter.Applies only to cursor parameters. Diese Option ist für CLR-Prozeduren nicht gültig.This option is not valid for CLR procedures.

Standardwertdefault
Ein Standardwert für den Parameter.Is a default value for the parameter.

OUT | OUTPUTOUT | OUTPUT
Zeigt an, dass es sich bei dem Parameter um einen Rückgabeparameter handelt.Indicates that the parameter is a return parameter.

READONLYREADONLY
Gibt an, dass der Parameter darf nicht aktualisiert oder innerhalb der Textkörper der Prozedur geändert.Indicates that the parameter cannot be updated or modified within the body of the procedure. Wenn der Parametertyp ein Tabellenwerttyp ist, muss READONLY angegeben werden.If the parameter type is a table-value type, READONLY must be specified.

RECOMPILERECOMPILE
Zeigt an, dass DatenbankmodulDatabase Engine den Plan für diese Prozedur nicht zwischenspeichert und die Prozedur zur Laufzeit neu kompiliert wird.Indicates that the DatenbankmodulDatabase Engine does not cache a plan for this procedure and the procedure is recompiled at run time.

ENCRYPTIONENCRYPTION
Gilt für: SQLServer ( SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass DatenbankmodulDatabase Engine den Originaltext der ALTER PROCEDURE-Anweisung in ein verborgenes Format umwandelt.Indicates that the DatenbankmodulDatabase Engine will convert the original text of the ALTER PROCEDURE statement to an obfuscated format. Die Ausgabe der Verbergung ist nicht direkt in den Katalogsichten in SQL ServerSQL Server sichtbar.The output of the obfuscation is not directly visible in any of the catalog views in SQL ServerSQL Server. Benutzer, die keinen Zugriff auf Systemtabellen oder Datenbankdateien haben, können den verborgenen Text nicht abrufen.Users that have no access to system tables or database files cannot retrieve the obfuscated text. Jedoch der Text stehen berechtigten Benutzern, die entweder Systemtabellen, über zugreifen können die DAC-Port oder direkt auf die Datenbankdateien zugreifen.However, the text will be available to privileged users that can either access system tables over the DAC port or directly access database files. Des Weiteren können Benutzer, die einen Debugger an den Serverprozess anfügen können, die Originalprozedur zur Laufzeit vom Arbeitsspeicher abrufen.Also, users that can attach a debugger to the server process can retrieve the original procedure from memory at runtime. Weitere Informationen zum Zugreifen auf Systemmetadaten finden Sie unter die Konfiguration der Metadatensichtbarkeit.For more information about accessing system metadata, see Metadata Visibility Configuration.

Prozeduren, die mit dieser Option erstellt wurden, können nicht als Teil der SQL ServerSQL Server-Replikation veröffentlicht werden.Procedures created with this option cannot be published as part of SQL ServerSQL Server replication.

Die Option kann nicht für CLR-gespeicherte Prozeduren (Common Language Runtime) angegeben werden.This option cannot be specified for common language runtime (CLR) stored procedures.

Hinweis

Während eines Upgrades der DatenbankmodulDatabase Engine verwendet die verborgenen Kommentare, die in gespeicherten sql_modules Prozeduren neu zu erstellen.During an upgrade, the DatenbankmodulDatabase Engine uses the obfuscated comments stored in sys.sql_modules to re-create procedures.

EXECUTE ASEXECUTE AS
Gibt den Sicherheitskontext an, unter dem die gespeicherte Prozedur ausgeführt wird, nachdem auf sie zugegriffen wurde.Specifies the security context under which to execute the stored procedure after it is accessed.

Weitere Informationen finden Sie unter EXECUTE AS-Klausel (Transact-SQL).For more information, see EXECUTE AS Clause (Transact-SQL).

FOR REPLICATIONFOR REPLICATION

Gibt an, dass für die Replikation erstellte gespeicherte Prozeduren nicht auf dem Abonnenten ausgeführt werden können.Specifies that stored procedures that are created for replication cannot be executed on the Subscriber. Eine gespeicherte Prozedur, die mit der Option FOR REPLICATION erstellt wurde, wird als Filter für gespeicherte Prozeduren verwendet und nur während der Replikation ausgeführt.A stored procedure created with the FOR REPLICATION option is used as a stored procedure filter and only executed during replication. Parameter können nicht deklariert werden, wenn FOR REPLICATION angegeben ist.Parameters cannot be declared if FOR REPLICATION is specified. Diese Option ist für CLR-Prozeduren nicht gültig.This option is not valid for CLR procedures. Die Option RECOMPILE wird bei Prozeduren ignoriert, die mit FOR REPLICATION erstellt wurden.The RECOMPILE option is ignored for procedures created with FOR REPLICATION.

Hinweis

Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.This option is not available in a contained database.

{[BEGIN] Sql_statement [;] [ ... n ] [END]}{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
Eine oder mehrere Transact-SQLTransact-SQL-Anweisungen, die den Textkörper der Prozedur umfassen.One or more Transact-SQLTransact-SQL statements comprising the body of the procedure. Sie können die optionalen BEGIN- und END-Schlüsselwörter zum Einschließen der Anweisungen verwenden.You can use the optional BEGIN and END keywords to enclose the statements. Weitere Informationen finden Sie in den Abschnitten bewährte Methoden, allgemeinen hinweisen und Einschränkungen in 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. keine Variablenargumentlisten verwendenEXTERNAL NAME assembly_name.class_name.method_name
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Gibt die Methode eine .NET Framework.NET Framework Assembly für eine CLR-gespeicherte Prozedur zu verweisen.Specifies the method of a .NET Framework.NET Framework assembly for a CLR stored procedure to reference. CLASS_NAME muss ein gültiger SQL ServerSQL Server Bezeichner und als Klasse in der Assembly vorhanden sein.class_name must be a valid SQL ServerSQL Server identifier and must exist as a class in the assembly. Wenn die Klasse hat ein Namespace qualifizierten Namen ein Punkt verwendet (.) um die einzelnen Bestandteile des Namespace voneinander zu trennen, muss der Klassenname durch eckige Klammern begrenzt werden ([]) oder Anführungszeichen ("").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 (""). Bei der angegebenen Methode muss es sich um eine statische Methode der Klasse handeln.The specified method must be a static method of the class.

Standardmäßig kann SQL ServerSQL Server keinen CLR-Code ausführen.By default, SQL ServerSQL Server cannot execute CLR code. Sie können erstellen, ändern und Löschen von Datenbankobjekten, die common Language Runtime-Module verweisen; Allerdings kann nicht Ausführen dieser Verweise in SQL ServerSQL Server erst nach Aktivierung der Option Clr-fähig.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. Verwenden Sie zum Aktivieren der Option Sp_configure.To enable the option, use sp_configure.

Hinweis

CLR-Prozeduren werden in einer enthaltenen Datenbank nicht unterstützt.CLR procedures are not supported in a contained database.

Allgemeine HinweiseGeneral Remarks

Transact-SQLTransact-SQL -gespeicherte Prozeduren können nicht in CLR-gespeicherte Prozeduren geändert werden und umgekehrt. stored procedures cannot be modified to be CLR stored procedures and vice versa.

ALTER PROCEDURE ändert keine Berechtigungen und wirkt sich nicht auf abhängige gespeicherte Prozeduren oder Trigger aus.ALTER PROCEDURE does not change permissions and does not affect any dependent stored procedures or triggers. Die Einstellungen der aktuellen Sitzung für QUOTED_IDENTIFIER und ANSI_NULLS werden jedoch in der gespeicherten Prozedur berücksichtigt, wenn diese geändert wird.However, the current session settings for QUOTED_IDENTIFIER and ANSI_NULLS are included in the stored procedure when it is modified. Unterscheiden sich die Einstellungen von denen, die bei der Erstellung der gespeicherten Prozedur gültig waren, ändert sich das Verhalten der gespeicherten Prozedur möglicherweise.If the settings are different from those in effect when stored procedure was originally created, the behavior of the stored procedure may change.

Wenn eine vorherige Prozedurdefinition mit WITH ENCRYPTION oder WITH RECOMPILE erstellt wurde, sind diese Optionen nur dann aktiviert, wenn sie in der ALTER PROCEDURE-Anweisung enthalten sind.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.

Weitere Informationen zu gespeicherten Prozeduren finden Sie unter CREATE PROCEDURE ( Transact-SQL ) .For more information about stored procedures, see CREATE PROCEDURE (Transact-SQL).

SicherheitSecurity

BerechtigungenPermissions

Erfordert ALTER Berechtigung für die Prozedur oder die Mitgliedschaft in der Db_ddladmin festen Datenbankrolle "".Requires ALTER permission on the procedure or requires membership in the db_ddladmin fixed database role.

BeispieleExamples

Im folgenden Beispiel wird die gespeicherte uspVendorAllInfo-Prozedur erstellt.The following example creates the uspVendorAllInfo stored procedure. Diese Prozedur gibt die Namen, die gelieferten Produkte, die Bonität und die Verfügbarkeit aller Hersteller, die Adventure Works CyclesAdventure Works Cycles beliefern, zurück.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. Nachdem diese Prozedur erstellt wurde, wird sie so geändert, dass ein anderes Resultset zurückgegeben wird.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  

Im folgenden Beispiel wird die gespeicherte uspVendorAllInfo-Prozedur geändert.The following example alters the uspVendorAllInfo stored procedure. Die EXECUTE AS CALLER-Klausel entfernt, und ändert den Textkörper der Prozedur nur Hersteller zurückgegeben, die das angegebene Produkt liefern.It removes the EXECUTE AS CALLER clause and modifies the body of the procedure to return only those vendors that supply the specified product. Mit den Funktionen LEFT und CASE wird die Darstellung des Resultsets angepasst.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  

Im Folgenden finden Sie das Resultset.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)`  

Siehe auchSee Also

CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE ( Transact-SQL ) DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
Führen Sie AS ( Transact-SQL ) EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Gespeicherte Prozeduren (Datenbankmodul) Stored Procedures (Database Engine)
Sys.Procedures ( Transact-SQL )sys.procedures (Transact-SQL)