Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Sintomas

Em um computador que esteja executando o Microsoft SQL Server 2008, considere os cenários a seguir.

Cenário 1

Você especifica uma CTE (expressão de tabela comum) usando a instrução WITH. Por exemplo, você executa a seguinte consulta.

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

Em seguida, você executa essa consulta.

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

Nesse cenário, o plano de consulta em cache para esta consulta armazena valores de statement_start_offset e statement_end_offset incorretos. Especificamente, você percebe que o valor de statement_end_offset é menor do que o valor de statement_start_offset quando você executa sys.dm_exec_query_stats a DMV (exibição de gerenciamento dinâmico). Devido a esse 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

Você especifica uma expressão de tabela comum usando a instrução WITH e usa a opção de recompilação. Por exemplo, você cria uma função no SQL Server 2008 usando o script a seguir.

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 "selecionar dbo. function1 ()", você recebe a seguinte mensagem de erro:

Ocorreu um erro grave no comando atual. Os resultados, se houver, devem ser descartados.

Além disso, esse erro pode ocorrer sem a opção de recompilação se o SQL Server estiver apresentando tráfego de servidor pesado.

Cenário 3

Você especifica uma expressão de tabela comum usando a instrução WITH. Na instrução WITH, você especifica uma tabela que não existe. Por exemplo, você executa a seguinte consulta.

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

Quando você executa essa consulta, você não recebe um erro para a tabela ausente.

Causa

Esses problemas ocorrem devido a um devido mau processamento de uma instrução SELECT que acompanha a instrução a com. A instrução WITH usa a sintaxe a seguir.

WITH common_table_expression AS(CTE_query_definition)

Em seguida, essa instrução cria um conjunto de resultados que é atribuído ao nome de expressão de tabela comum especificado. Em seguida, você segue essa instrução com uma instrução SELECT. Se essa segunda instrução estiver colocada entre parênteses e você tentar executar uma operação nos resultados ou se tentar executar um modo de exibição de gerenciamento dinâmico sys.dm_exec_query_stats, você receberá resultados incorretos ou um erro.

Resolução

Informações do Service Pack Para solucionar esse problema, obtenha o Service Pack mais recente do SQL Server 2008. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

968382 Como obter o Service Pack mais recente para o SQL Server 2008

Solução alternativa

Para contornar esses problemas, você precisa remover os parênteses da instrução que acompanha a expressão de tabela comum. Por exemplo, considere o seguinte instrução WITH que usa tais parênteses.

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

Para contornar esses problemas, altere para o seguinte, com uma instrução que não usa esses parênteses.

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

Status

A Microsoft confirmou que isso é um problema dos produtos da Microsoft listados na seção "aplica-se a". Esse problema foi corrigido primeiro no SQL Server 2008 Service Pack 2 (SP2).

Informações adicionais

Para obter mais informações sobre como usar a instrução WITH com uma expressão de tabela comum, acesse a seguinte página da Web do MSDN:

COM o common_table_expression (Transact-SQL)Para obter mais informações sobre sys.dm_exec_query_stats, acesse a seguinte página da Web do MSDN:

sys.dm_exec_query_stats (Transact-SQL)

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×