FIX: Dell'esecuzione simultanea di stored procedure che ricompila potrebbe non riuscire tutte le istruzioni di esecuzione

Traduzione articoli Traduzione articoli
Identificativo articolo: 250506 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato archiviato. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.
BUG #: 55251 (SQLBUG_70)
Espandi tutto | Chiudi tutto

Sintomi

Una stored procedure in modo invisibile all'utente potrebbe non eseguire tutte le istruzioni in esso contenute se vengono soddisfatte le condizioni seguenti:

  • Pi¨ connessioni eseguono contemporaneamente la stessa procedura.

  • Il riferimento a una tabella temporanea creata di fuori di questa procedura viene creato.

  • Una o pi¨ istruzioni che potrebbero causare anche la ricompilazione (potenzialmente attivato da auto update statistics) seguono il riferimento a questa tabella temporanea.
Per alcuni utenti esecuzione della procedure mentre altri errori possono eseguire tutte le istruzioni.

Workaround

Creare la routine con la clausola WITH RECOMPILE oppure utilizzare la clausola WITH RECOMPILE quando si esegue la procedura.

Status

Microsoft ha confermato che si tratta un problema in SQL Server 7.0. Questo problema Ŕ stato corretto in U.S. Service Pack 2 per Microsoft SQL Server 7.0. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
254561INF: Come ottenere il Service Pack 2 per Microsoft SQL Server 7.0 e Microsoft Data Engine (MSDE) 1.0
Per ulteriori informazioni, contattare il provider di supporto.

Informazioni

Se un riferimento a una tabella temporanea creata all'esterno della routine corrente, che istruzione e le eventuali istruzioni successive possono non essere compilate quando la routine viene eseguita prima. Infatti, non sono noto informazioni sullo schema della tabella. Dopo l'esecuzione raggiunge l'istruzione e i valori dello schema e di cardinalitÓ sono disponibili, la procedura viene ricompilata utilizzando queste informazioni. Per ridurre al minimo in fase di compilazione, SQL Server Ŕ una "compilazione parziale" in questa situazione e genera solo un piano di query per le istruzioni fino a questo.

PoichÚ pi¨ utenti possono condividere un piano compilato, SQL Server 7.0 serializza ricompilazioni per garantire che solo una delle connessioni esegue la ricompilazione. Anche le altre connessioni necessario ricompilare, sono in attesa sulla prima connessione per completare la ricompilazione e riprendere l'esecuzione al loro passaggio successivo.

Se si verifica una situazione in cui sono di due connessioni a varie fasi di esecuzione e quello che attiva la ricompilazione Ŕ, innanzitutto, prima del riferimento di tabella temporanea creata all'esterno della routine, verrÓ interrotta la compilazione di un piano quando viene raggiunta l'istruzione. Se una seconda connessione Ŕ in un punto qualsiasi al termine e attiva inoltre una ricompilazione, mentre la prima connessione Ŕ la compilazione, viene riprende l'esecuzione e si ritiene erroneamente che sono eseguito tutte le istruzioni nel piano.

Se si utilizza WITH RECOMPILE, quando la procedura viene creata o quando viene eseguita, le due connessioni mai condividono lo stesso piano compilato e non verificheranno mai questa condizione.

Dove possibile, inoltre Ŕ consigliabile non fare riferimento una tabella temporanea creata di fuori della routine corrente, perchÚ richiede sempre la ricompilazione della procedura a. Altre procedure di programmazione per le stored procedure sono reperibili nell'argomento "Transact-SQL suggerimenti" nella documentazione in linea di SQL.

Per determinare quando una routine Ŕ essere ricompilata, Ŕ possibile controllare l'evento di SP: Recompile in SQL Profiler.

ProprietÓ

Identificativo articolo: 250506 - Ultima modifica: giovedý 30 gennaio 2014 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 7.0 Standard Edition
Chiavi:á
kbnosurvey kbarchive kbmt kbbug kbfix KB250506 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 250506
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com