Al momento sei offline in attesa che la connessione Internet venga ristabilita

FIX: risultati non corretti se si utilizzano parentesi SELECT in un'istruzione contenente un'espressione di tabella comune in SQL Server 2008

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: 2322209
Sintomi
In un computer che esegue SQL Server 2008, prendere in considerazione i seguenti scenari.

Scenario 1

Si specifica un'espressione di tabella comuni (CTE) utilizzando l'istruzione WITH. Ad esempio, eseguire la seguente query.
WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)
Quindi eseguire la query.
SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1
In questo scenario, il piano di query memorizzati nella cache per questa query memorizza valori statement_start_offset e statement_end_offset errati. In particolare, si noterà che il valore statement_end_offset è minore del valore statement_start_offset quando si esegue sys.dm_exec_query_stats vista di gestione dinamica (DMV).

Causa del problema, un report di prestazioni potrebbe non riuscire quando il report si presuppone che il valore statement_start_offset è sempre inferiore a valore statement_stop_offset.

Scenario 2

Si specifica un'espressione di tabella comune utilizzando l'istruzione WITH e si utilizza l'opzione RECOMPILE. Ad esempio, creare una funzione in SQL Server 2008 utilizzando 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 “ selezionare dbo.function1() ”, viene visualizzato il seguente messaggio di errore:
un grave errore durante il comando corrente. I risultati eventuali devono essere ignorati.

Inoltre, questo errore può verificarsi senza l'opzione RECOMPILE se SQL server si verifica traffico intenso del server.

Scenario 3

Si specifica un'espressione di tabella comune utilizzando l'istruzione WITH. Nell'istruzione WITH è possibile specificare una tabella che non esiste. Ad esempio, eseguire la seguente query.
WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO
Quando si esegue questa query non viene visualizzato un errore relativo alla tabella mancante.
Cause
Questi problemi si verificano a causa di una malfunzionamento l'elaborazione di un'istruzione SELECT che segue un'istruzione WITH. L'istruzione WITH viene utilizzata la seguente sintassi.
WITH common_table_expression AS(CTE_query_definition)
Quindi questa istruzione crea un set di risultati viene assegnato il nome di espressione di tabella comune specificato. Seguire quindi questa istruzione con un'istruzione SELECT. Se la seconda istruzione è racchiuso tra parentesi e si tenta di eseguire un'operazione sui risultati o si tenta di eseguire una vista di gestione dinamica sys.dm_exec_query_stats, riceverai risultati errati o un errore.
Risoluzione
Questi problemi sono stati risolti nella CTP di SQL Server 2008 Service Pack 2. Scaricare e installare il più recente pacchetto di SQL Server 2008 service.
968382Come ottenere il service pack più recente per SQL Server 2008
Di SQL Server 2008 Service Pack 2 CTP può essere scaricato direttamente dall'area Download Microsoft:
Workaround
Per risolvere questi problemi, è necessario rimuovere le parentesi dell'istruzione che segue l'espressione di tabella comune. Ad esempio, considerare i seguenti WITH istruzione che utilizza tali parentesi.
WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)
Per risolvere questi problemi, modificare il seguente WITH istruzione che non utilizza le parentesi.
WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio
Status
Microsoft ha confermato che si tratta di un problema con i prodotti elencati nella sezione "Si applica a".
Informazioni
Per ulteriori informazioni su come utilizzare l'istruzione WITH con un'espressione di tabella comune, visitare la seguente pagina Web MSDN:Per ulteriori informazioni su sys.dm_exec_query_stats, visitare la seguente pagina Web MSDN:
query di codice SQL cte

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 2322209 - Ultima revisione: 08/31/2010 20:36:00 - Revisione: 1.0

Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Workgroup

  • kbqfe kbfix kbexpertiseadvanced kbsurveynew kbtshoot kbquery kbmt KB2322209 KbMtit
Feedback
e; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">