Delen via


sp_recompile (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Zorgt ervoor dat opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies opnieuw worden gecompileerd de volgende keer dat ze worden uitgevoerd. Dit gebeurt door het bestaande plan uit de procedurecache te verwijderen, waardoor er bij de volgende uitvoering van de procedure of trigger een nieuw plan wordt aangemaakt. In een SQL Server Profiler-collectie wordt het event SP:CacheInsert gelogd in plaats van het event SP:Recompile.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

[ @objname = ] Geen probleem'

De gekwalificeerde of niet-gekwalificeerde naam van een opgeslagen procedure, trigger, tabel, weergave of door de gebruiker gedefinieerde functie in de huidige database. @objname is nvarchar(776), zonder standaard.

  • Als @objname de naam is van een opgeslagen procedure, trigger of door de gebruiker gedefinieerde functie, wordt de opgeslagen procedure, trigger of functie de volgende keer opnieuw gecompileerd.

  • Als @objname de naam is van een tabel of weergave, worden alle opgeslagen procedures, triggers of door de gebruiker gedefinieerde functies die naar de tabel of weergave verwijzen, de volgende keer opnieuw gecompileerd.

Codewaarden retourneren

0 (geslaagd) of een niet-nulnummer (fout).

Opmerkingen

sp_recompile zoekt alleen naar een object in de huidige database.

De queries die worden gebruikt door stored procedures, of triggers, en door de gebruiker gedefinieerde functies worden alleen geoptimaliseerd wanneer ze worden gecompileerd. Naarmate indexen of andere wijzigingen die statistieken beïnvloeden aan de database worden doorgevoerd, kunnen gecompileerde opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies aan efficiëntie verliezen. Door stored procedures en triggers die op een tabel werken opnieuw te compileren, kun je de queries opnieuw optimaliseren.

Proactieve uitvoering van deze opgeslagen procedure is meestal niet nodig. SQL Server compileert automatisch opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies wanneer dit voordelig is. Er zijn verschillende redenen waarom de database-engine ervoor kan kiezen om objecten opnieuw te compileren. Meestal volgt automatische hercompilatie veranderingen in de onderliggende cardinaliteitsschatting door automatische of handmatige statistiekupdates.

Het opnieuw compileren van een opgeslagen procedure bij elke uitvoering is een van de minder efficiënte manieren om queryplanproblemen veroorzaakt door parameterisatie te bestrijden. De functie Parameter Sensitive Plan-optimalisatie , geïntroduceerd in SQL Server 2022 (16.x), probeert dit probleem automatisch te verhelpen. In eerdere versies kun je in plaats van bij elke uitvoering aan te roepen sp_recompile :

Permissions

Vereist ALTER-toestemming voor het opgegeven object.

Voorbeelden

Het volgende voorbeeld zorgt ervoor dat opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies die op de Sales.Customer tabel werken, de volgende keer dat ze worden uitgevoerd, opnieuw worden gecompileerd.

USE AdventureWorks2022;
GO

EXECUTE sp_recompile N'Sales.Customer';
GO