ALTER PROCEDURE (Transact-SQL)
Mis à jour : 5 décembre 2005
Modifie une procédure déjà créée en exécutant l'instruction CREATE PROCEDURE. ALTER PROCEDURE ne modifie pas les autorisations et n'affecte aucune procédure ni aucun déclencheur dépendants. Cependant, les paramètres QUOTED_IDENTIFIER et ANSI_NULLS de la session active sont inclus dans la procédure stockée lorsque celle-ci est modifiée. Si les paramètres sont différents des paramètres actifs lors de la création de la procédure stockée, le comportement de celle-ci peut changer.
Conventions de la syntaxe de Transact-SQL
Syntaxe
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ [ OUT [ PUT ]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS
{ <sql_statement> [ ...n ] | <method_specifier> }
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
EXTERNAL NAME
assembly_name.class_name.method_name
Arguments
- schema_name
Nom du schéma auquel appartient la procédure.
- procedure_name
Nom de la procédure à modifier. Les noms des procédures doivent respecter les conventions concernant les identificateurs.
**;**number
Entier facultatif existant utilisé pour regrouper les procédures de même nom de façon à pouvoir les supprimer au moyen d'une instruction DROP PROCEDURE.Remarque : Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.
- **@**parameter
Paramètre de la procédure. Il est possible de spécifier jusqu'à 2 100 paramètres.
[ type_schema_name**.** ] data_type
Type de données du paramètre et du schéma auquel elle appartient.Pour plus d'informations sur les restrictions applicables aux types de données, consultez CREATE PROCEDURE (Transact-SQL).
- VARYING
Spécifie l'ensemble de résultats pris en charge comme paramètre de sortie. La procédure stockée construit dynamiquement ce paramètre. Son contenu est variable. S'applique seulement aux paramètres de type cursor.
- default
Valeur par défaut pour le paramètre.
- OUTPUT
Indique que le paramètre est un paramètre renvoyé.
- RECOMPILE
Indique que le moteur de base de données n'utilise pas le cache pour le plan de cette procédure et que la procédure est recompilée à l'exécution.
ENCRYPTION
Indique que le moteur de base de données se charge de convertir le texte d'origine provenant de l'instruction ALTER PROCEDURE dans un format d'obfuscation. La sortie générée par l'obfuscation n'est pas visible directement dans les affichages catalogue de SQL Server 2005. Les utilisateurs n'ayant pas accès aux tables système ou aux fichiers de base de données ne peuvent pas récupérer le texte d'obfuscation. Le texte est cependant à la disposition des utilisateurs dotés de privilèges qui accèdent aux tables système via le port DAC ou qui accèdent directement aux fichiers de bases de données. Les utilisateurs qui peuvent associer un débogueur au processus serveur peuvent également récupérer la procédure d'origine de la mémoire au moment de l'exécution. Pour plus d'informations sur l'accès aux métadonnées système, consultez Configuration de la visibilité des métadonnées.Les procédures créées à l'aide de cette option ne peuvent pas être publiées dans le cadre d'une réplication SQL Server.
Cette option ne peut pas être spécifiée pour les procédures stockées CLR (Common Language Runtime).
Remarque : Au cours d'une mise à niveau, le moteur de base de données utilise les commentaires d'obfuscation stockés dans sys.sql_modules pour recréer des procédures.
EXECUTE AS
Spécifie le contexte de sécurité dans lequel exécuter la procédure stockée après y avoir accédé.Pour plus d'informations, consultez Clause EXECUTE AS (Transact-SQL).
- FOR REPLICATION
Indique qu'il n'est pas possible d'exécuter sur l'Abonné les procédures stockées créées pour la réplication. Une procédure stockée créée avec l'option FOR REPLICATION est utilisée comme filtre de procédure stockée et n'est exécutée que lors de la réplication. Il n'est pas possible de déclarer des paramètres si FOR REPLICATION est spécifié. L'option RECOMPILE est ignorée pour les procédures créées avec l'option FOR REPLICATION.
- AS
Actions que la procédure doit effectuer.
- <sql_statement>
Tout numéro et type d'instructions Transact-SQL à inclure dans la procédure. Certaines limitations sont applicables. Pour plus d'informations, consultez « Limitations de <sql_statement> » dans CREATE PROCEDURE (Transact-SQL).
EXTERNAL NAME , assembly_name**.class_name.method_name
Spécifie la méthode d'un assembly Microsoft .NET Framework pour créer une référence à une procédure stockée CLR. class_name doit être un identificateur SQL Server valide et doit exister au sein d'une classe de l'assembly. Si la classe a un nom qualifié par un espace de noms, utilisez un point (.) pour séparer les parties de l'espace de noms. Le nom de la classe doit figurer entre crochets ([** ]) ou entre guillemets doubles (" "). La méthode spécifiée doit être une méthode statique de la classe.Remarque : Par défaut, SQL Server ne peut pas exécuter du code CLR. Vous pouvez créer, modifier et supprimer des objets d'une base de données qui font référence à des modules CLR (Common Language Runtime) ; cependant, vous ne pouvez pas exécuter ces références dans SQL Server tant que vous n'avez pas activé l'option clr enabled. Pour activer cette option, utilisez sp_configure.
Notes
Il n'est pas possible de modifier des procédures stockées Transact-SQL pour les transformer en procédures stockées CLR et inversement.
Pour plus d'informations, consultez la section Remarques dans CREATE PROCEDURE (Transact-SQL).
Remarque : |
---|
Si une procédure à été créée avec les options WITH ENCRYPTION ou WITH RECOMPILE, ces options sont activées seulement si elles figurent dans l'instruction ALTER PROCEDURE. |
Autorisations
Nécessite l'autorisation ALTER sur la procédure.
Exemple
L'exemple suivant crée la procédure stockée uspVendorAllInfo
. Cette procédure retourne le nom de tous les fournisseurs de Adventure Works Cycles, les produits qu'ils vendent, leurs conditions de crédit et leur disponibilité. Lorsque cette procédure est créée, elle est ensuite modifiée pour renvoyer un ensemble de résultats différent.
USE AdventureWorks;
GO
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 'Credit Rating',
v.ActiveFlag AS Availability
FROM Purchasing.Vendor v
INNER JOIN Purchasing.ProductVendor pv
ON v.VendorID = pv.VendorID
INNER JOIN Production.Product p
ON pv.ProductID = p.ProductID
ORDER BY v.Name ASC;
GO
L'exemple suivant modifie la procédure stockée uspVendorAllInfo
(sans l'option EXECUTE AS) pour qu'elle retourne uniquement les fournisseurs qui proposent le produit spécifié. Les fonctions LEFT
et CASE
personnalisent l'affichage de l'ensemble de résultats.
ALTER PROCEDURE Purchasing.uspVendorAllInfo
@Product varchar(25)
AS
SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name',
'Credit 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.VendorID = pv.VendorID
INNER JOIN Production.Product AS p
ON pv.ProductID = p.ProductID
WHERE p.Name LIKE @Product
ORDER BY v.Name ASC;
GO
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';
GO
Voici l'ensemble des résultats.
Vendor Product name Credit rating Availability
-------------------- ------------------- ------------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)
Voir aussi
Référence
CREATE PROCEDURE (Transact-SQL)
Langage de contrôle de flux (Transact-SQL)
Types de données (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL)
EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL)
Fonctions (Transact-SQL)
sp_depends (Transact-SQL)
sp_procoption (Transact-SQL)
sp_recompile (Transact-SQL)
sys.sql_modules (Transact-SQL)
sys.parameters (Transact-SQL)
sys.procedures (Transact-SQL)
sys.sql_dependencies (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.numbered_procedures (Transact-SQL)
sys.numbered_procedure_parameters (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
Autres ressources
Lots d'instructions
Curseurs (moteur de base de données)
Procédures stockées (moteur de base de données)
Utilisation de variables et de paramètres (moteur de base de données)
Modification du schéma dans les bases de données de publication
Procédure : modifier une procédure stockée (SQL Server Management Studio)
Aide et Informations
Assistance sur SQL Server 2005
Historique des modifications
Version | Historique |
---|---|
5 décembre 2005 |
|