Ho sempre pensato che l'aggiornamento di una procedura memorizzata fosse qualcosa che potevo fare mentre gli utenti utilizzavano attivamente il sistema.
Ma attualmente sto testando un aggiornamento di una procedura memorizzata e durante l'esecuzione di una chiamata a lunga durata allo sproc (sono stati 4+ minuti nella chiamata), ho aggiornato lo sproc. (Avevo intenzione di provare un piano di query diverso in una finestra separata.)
Quando sono tornato a quello di lunga durata, ho avuto questo errore:
The definition of object 'MySprocName' has changed since it was compiled.
Questo errore sembra dire che qualsiasi sproc che viene eseguito attivamente fallirà se la definizione di quello sproc viene aggiornata. (Ho pensato che una volta che uno sproc ha iniziato a funzionare, avrebbe usato quel piano per il resto della corsa nonostante le modifiche alla definizione.)
È vero? Devo avere tempi di inattività per aggiornare la definizione di uno sproc?
WITH RECOMPILE
? Questa è un'opzione a livello di procedura per impostare la procedura da ricompilare dopo ogni esecuzione. Ciò significa che il piano si ricompilerà sempre, evitando così di riutilizzare i piani memorizzati nella cache.