sp_recompile (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Provoque la recompilation des procédures stockées, des déclencheurs et des fonctions définies par l’utilisateur la prochaine fois qu’elles sont exécutées. Pour ce faire, supprimez le plan existant du cache de procédures, forçant la création d’un nouveau plan la prochaine fois que la procédure ou le déclencheur est exécuté. Dans une collection SQL Server Profiler, l’événement SP:CacheInsert est enregistré au lieu de l’événement SP:Recompile.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_recompile [ @objname = ] N'object'
[ ; ]

Arguments

[ @objname = ] N’object'

Nom qualifié ou non qualifié d'une procédure stockée, d'un déclencheur, d'une table, d'une vue ou d'une fonction définie par l'utilisateur dans la base de données actuelle. @objname est nvarchar(776), sans valeur par défaut.

  • Si @objname est le nom d’une procédure stockée, d’un déclencheur ou d’une fonction définie par l’utilisateur, la procédure stockée, le déclencheur ou la fonction seront recompilés la prochaine fois qu’elle est exécutée.

  • Si @objname est le nom d’une table ou d’une vue, toutes les procédures stockées, déclencheurs ou fonctions définies par l’utilisateur qui référencent la table ou la vue sont recompilées la prochaine fois qu’elles sont exécutées.

Valeurs des codes de retour

0 (réussite) ou un nombre différent de zéro (échec)

Notes

sp_recompile recherche un objet dans la base de données active uniquement.

Les requêtes utilisées par les procédures stockées ou les déclencheurs et les fonctions définies par l’utilisateur sont optimisées uniquement lorsqu’elles sont compilées. À mesure que vous ajoutez des index à votre base de données ou que vous y apportez d'autres changements modifiant ses statistiques, les procédures stockées, les déclencheurs et les fonctions définies par l'utilisateur compilés peuvent perdre de leur efficacité. En recompilant les procédures stockées et les déclencheurs qui agissent sur une table, vous pouvez réoptimiser les requêtes.

L’exécution proactive de cette procédure stockée est généralement inutile. SQL Server recompile automatiquement les procédures stockées, les déclencheurs et les fonctions définies par l’utilisateur lorsqu’ils sont avantageux. Il existe différentes raisons pour lesquelles le moteur de base de données peut choisir de recompiler des objets. Le plus souvent, la recompilation automatique suit les modifications apportées à l’estimation de carte inalité sous-jacente en raison des mises à jour automatiques ou manuelles des statistiques.

La recompilation d’une procédure stockée avec chaque exécution est l’une des méthodes les moins efficaces pour lutter contre les problèmes de plan de requête provoqués par le paramétrage. L’optimisation du plan sensible aux paramètres de fonctionnalité introduite dans SQL Server 2022 (16.x) tente d’atténuer automatiquement ce problème. Dans les versions antérieures, au lieu d’appeler sp_recompile avec chaque exécution, tenez compte des éléments suivants :

Autorisations

Nécessite l'autorisation ALTER pour l'objet spécifié.

Exemples

L’exemple suivant entraîne la recompilation des procédures stockées, des déclencheurs et des fonctions définies par l’utilisateur qui agissent sur la Sales.Customer table pour qu’elles soient recompilées la prochaine fois qu’elles sont exécutées.

USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO