Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

In un computer che sta eseguendo Microsoft SQL Server 2008, considerare gli scenari seguenti.

Scenario 1

Per specificare un'espressione di tabella comune (CTE), usare l'istruzione WITH. Ad esempio, Esegui la query seguente.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

Esegui quindi questa query.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

In questo scenario, il piano di query memorizzato nella cache per la query archivia i valori statement_start_offset e statement_end_offset non corretti. In particolare, si nota che il valore statement_end_offset è minore del valore di statement_start_offset quando si esegue sys.dm_exec_query_stats DMV (Dynamic Management View). A causa di questo problema, un report di prestazioni potrebbe non riuscire quando il report presuppone che il valore statement_start_offset sia sempre inferiore al valore statement_stop_offset.

Scenario 2

È possibile specificare un'espressione di tabella comune usando l'istruzione WITH e si usa l'opzione RECOMPILE. Ad esempio, è possibile creare una funzione in SQL Server 2008 usando lo script seguente.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

Quando si esegue una query "SELECT dbo. funzione1 ()", viene visualizzato il messaggio di errore seguente:

Si è verificato un grave errore nel comando corrente. I risultati, se presenti, devono essere eliminati.

Questo errore può inoltre verificarsi senza l'opzione di ricompilazione se SQL Server sta verificando il traffico pesante del server.

Scenario 3

Per specificare un'espressione di tabella comune, è possibile usare l'istruzione WITH. Nell'istruzione WITH si specifica una tabella che non esiste. Ad esempio, Esegui la query seguente.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

Quando si esegue la query, non viene visualizzato un messaggio di errore per la tabella mancante.

Causa

Questi problemi si verificano a causa di un'elaborazione malfunzionante di un'istruzione SELECT che segue un'istruzione WITH. L'istruzione WITH usa la sintassi seguente.

WITH common_table_expression AS(CTE_query_definition)

Questa istruzione crea quindi un set di risultati assegnato al nome dell'espressione di tabella comune specificato. Quindi, segui questa istruzione con un'istruzione SELECT. Se questa seconda istruzione è racchiusa tra parentesi e si prova a eseguire un'operazione sui risultati oppure si prova a eseguire una sys.dm_exec_query_stats visualizzazione a gestione dinamica, si riceveranno risultati non corretti o un errore.

Risoluzione

Informazioni sui Service Pack Per risolvere il problema, ottenere il Service Pack più recente per SQL Server 2008. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:

968382 Come ottenere il Service Pack più recente per SQL Server 2008

Soluzione alternativa

Per risolvere questi problemi, è necessario rimuovere le parentesi dall'istruzione che segue l'espressione di tabella comune. Ad esempio, considera l'istruzione seguente WITH che usa tali parentesi.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

Per aggirare questi problemi, passare alla seguente istruzione WITH che non usa queste parentesi.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

Stato

Microsoft ha confermato che si tratta di un problema nei prodotti Microsoft elencati nella sezione "si applica a". Questo problema è stato risolto per la prima volta in SQL Server 2008 Service Pack 2 (SP2).

Ulteriori informazioni

Per altre informazioni su come usare l'istruzione WITH con un'espressione di tabella comune, visitare la pagina Web MSDN seguente:

CON common_table_expression (Transact-SQL)Per altre informazioni su sys.dm_exec_query_stats, visitare la pagina Web MSDN seguente:

sys.dm_exec_query_stats (Transact-SQL)

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×