Condividi tramite


sp_recompile (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Causa la ricompilazione di stored procedure, trigger e funzioni definite dall'utente alla successiva esecuzione. A tale scopo, eliminare il piano esistente dalla cache delle procedure, forzando la creazione di un nuovo piano alla successiva esecuzione della routine o del trigger. In una raccolta di SQL Server Profiler l'evento SP:CacheInsert viene registrato anziché l'evento SP:Recompile.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

[ @objname = ] N'object'

Nome qualificato o non qualificato di una stored procedure, un trigger, una tabella, una vista o una funzione definita dall'utente nel database corrente. @objname è nvarchar(776), senza impostazione predefinita.

  • Se @objname è il nome di una stored procedure, di un trigger o di una funzione definita dall'utente, la stored procedure, il trigger o la funzione verranno ricompilate alla successiva esecuzione.

  • Se @objname è il nome di una tabella o di una vista, tutte le stored procedure, i trigger o le funzioni definite dall'utente che fanno riferimento alla tabella o alla vista verranno ricompilate alla successiva esecuzione.

Valori del codice restituito

0 (esito positivo) o un numero diverso da zero (errore).

Osservazioni:

sp_recompile cerca solo un oggetto nel database corrente.

Le query usate da stored procedure o trigger e le funzioni definite dall'utente sono ottimizzate solo quando vengono compilate. Poiché gli indici o altre modifiche che influiscono sulle statistiche vengono apportati al database, le stored procedure compilate, i trigger e le funzioni definite dall'utente potrebbero perdere efficienza. Tramite la ricompilazione delle stored procedure e dei trigger che modificano una tabella, è possibile riottimizzare le query.

L'esecuzione proattiva di questa stored procedure non è in genere necessaria. SQL Server ricompila automaticamente stored procedure, trigger e funzioni definite dall'utente quando è vantaggioso. Esistono diversi motivi per cui il motore di database potrebbe scegliere di ricompilare gli oggetti. In genere, la ricompilazione automatica segue le modifiche alla stima della cardinalità sottostante a causa di aggiornamenti automatici o manuali delle statistiche.

La ricompilazione di una stored procedure con ogni esecuzione è uno dei modi meno efficienti per combattere i problemi del piano di query causati dalla parametrizzazione. L'ottimizzazione del piano sensibile ai parametri della funzionalità introdotta in SQL Server 2022 (16.x) tenta di attenuare automaticamente questo problema. Nelle versioni precedenti, invece di chiamare sp_recompile con ogni esecuzione, prendere in considerazione:

  • Aggiungere l'opzione WITH RECOMPILE alla query, che richiede una modifica del codice.
  • Applicare l'opzione WITH RECOMPILE con una guida di piano.
  • Applicare l'opzione WITH RECOMPILE con un hint di Query Store senza apportare modifiche al codice.
  • Per altre informazioni, vedere Risoluzione delle query con problemi di piano sensibili ai parametri.

Autorizzazioni

È richiesta l'autorizzazione ALTER per l'oggetto specificato.

Esempi

Nell'esempio seguente vengono eseguite stored procedure, trigger e funzioni definite dall'utente che agiscono sulla Sales.Customer tabella per essere ricompilate alla successiva esecuzione.

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