Você está offline; aguardando reconexão

FIX: resultados incorretos se você usar parênteses ao redor de SELECT em uma instrução que contém uma expressão de tabela comuns no SQL Server 2008

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 2322209
Sintomas
Em um computador que esteja executando o Microsoft SQL Server 2008, considere os cenários a seguir.

Cenário 1

Especificar uma expressão de tabela comuns (CTE) por meio da instrução WITH. Por exemplo, você deve executar a consulta seguinte.
WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)
Em seguida, você deve executar essa consulta.
SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1
Neste cenário, o plano de consulta em cache para esta consulta armazena valores incorretos de statement_start_offset e statement_end_offset. Especificamente, observe o valor statement_end_offset é menor do que o valor de statement_start_offset quando você executa o modo de exibição de gerenciamento dinâmico sys.dm_exec_query_stats (DMV).

Por causa do problema, um relatório de desempenho pode falhar quando o relatório pressupõe que o valor de statement_start_offset é sempre menor do que o valor de statement_stop_offset.

Cenário 2

Especificar uma expressão de tabela comum por meio da instrução WITH, e você usar a opção RECOMPILE. Por exemplo, criar uma função no SQL Server 2008 usando o seguinte script.
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 você executa uma consulta “ selecione dbo.function1() ”, você recebe a seguinte mensagem de erro:
um grave erro sobre o comando atual. Os resultados, se houver algum, deverão ser descartados.

Além disso, este erro pode ocorrer sem a opção RECOMPILE se o SQL server está passando por tráfego pesado de servidor.

Cenário 3

Especificar uma expressão de tabela comum por meio da instrução WITH. Instrução WITH, você pode especificar uma tabela que não existe. Por exemplo, você deve executar a consulta seguinte.
WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO
Quando você executar essa consulta, você não receber um erro para a tabela está faltando.
Causa
Esses problemas ocorrem devido a um processamento com problemas de uma instrução SELECT que segue uma instrução WITH. A instrução WITH usa a sintaxe a seguir.
WITH common_table_expression AS(CTE_query_definition)
Nesta declaração, em seguida, cria um conjunto de resultados que é atribuído para o nome de expressão de tabela comum, que foi especificado. Em seguida, você seguir essa declaração com uma instrução SELECT. Se esta segunda instrução seja colocada entre parênteses e você tenta executar uma operação nos resultados ou tenta executar um modo de exibição de gerenciamento dinâmico de sys.dm_exec_query_stats, você recebe resultados incorretos ou um erro.
Resolução
Esses problemas foram resolvidos na CTP do SQL Server 2008 Service Pack 2. Baixe e instale as últimas SQL Server 2008 service pack.
968382Como obter o service pack mais recente do SQL Server 2008
O SQL Server 2008 Service Pack 2 CTP, podem ser baixado diretamente a partir do Centro de download da Microsoft:
Como Contornar
Para solucionar esses problemas, remova-os entre parênteses da instrução que segue a expressão de tabela comum. Por exemplo, considere o seguinte com a declaração que usa esses entre parênteses.
WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)
Para solucionar esses problemas, altere para a seguir com a instrução que não usa esses entre parênteses.
WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais Informações
Para obter mais informações sobre como usar a instrução WITH com uma expressão de tabela comuns, visite a seguinte página da Web do MSDN:Para obter mais informações sobre sys.dm_exec_query_stats, visite a seguinte página da Web do MSDN:
consulta de código SQL cte

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 2322209 - Última Revisão: 08/31/2010 20:39:00 - Revisão: 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 KbMtpt
Comentários
/html>amp;t=">