Condividi tramite


MSSQLSERVER_8632

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 8632
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico QUERY_EXPRESSION_TOO_COMPLEX
Testo del messaggio Errore interno: è stato raggiunto un limite per i servizi di gestione delle espressioni. Provare a semplificare la query rimuovendo le espressioni particolarmente complesse.

Spiegazione

L'errore 8632 viene generato quando si esegue una query in SQL Server che contiene un numero elevato di identificatori e costanti in una singola espressione. Viene segnalato all'utente un messaggio di errore simile al seguente:

Server: Messaggio 8632, Livello 17, Stato 2, Riga 1
Errore interno: è stato raggiunto un limite per i servizi di gestione delle espressioni. Provare a semplificare la query rimuovendo le espressioni particolarmente complesse.

Causa

Questo problema si verifica perché SQL Server limita il numero di identificatori e costanti che possono essere contenuti in una singola espressione di una query. Il limite è 65.535. La query seguente, ad esempio, include solo un'espressione:

select a, b + c, d + e

Questa espressione recupera tutte e cinque le colonne, calcola gli operatori di addizione e invia tre risultati previsti al client.

Il test per il numero di identificatori e costanti viene eseguito dopo che SQL Server espande tutti gli identificatori e le costanti a cui si fa riferimento. Ad esempio, gli elementi seguenti potrebbero essere espansi:

  • L'asterisco (*) nell'elenco di selezione
  • Una vista
  • Una definizione di colonna calcolata

Se il numero dopo l'espansione supera il limite, non sarà possibile eseguire la query.

Azione utente

Per ovviare a questo problema, riscrivere la query. Fare riferimento a un numero inferiore di identificatori e costanti nell'espressione più grande nella query. È necessario assicurarsi che il numero di identificatori e costanti in ogni espressione della query non superi il limite. A tale scopo, potrebbe essere necessario suddividere una query in più query e creare quindi un risultato intermedio temporaneo.