KB2589980 - CORRECÇÃO: Resultados incorretos ou violação de restrição quando você executa uma instrução SELECT ou DML que usa a função row_number e um plano de execução paralela no SQL Server 2008

Aplica-se A
SQL Server 2008

A Microsoft distribui correções do Microsoft SQL Server 2008 como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 corrigir lançamento.

Sintomas

Tenha em conta o seguinte cenário:

  • Executar uma consulta paralela que usa a função row_number no Microsoft SQL Server 2008.
  • Pode tentar executar a consulta utilizando uma subconsulta que está dentro de uma instrução SELECT ou uma instrução DML (Data Manipulation Language).

Nesse cenário, você encontra um dos seguintes problemas:

  • Recebe resultados incorretos se executar a consulta dentro da instrução SELECT muitas vezes.

  • A tabela poderá conter dados incorretos se a consulta for executada dentro de uma instrução DML. Se a tabela tiver restrições, a instrução poderá falhar com uma violação de restrição.

    Por exemplo, uma instrução INSERT poderá falhar e ocorrer um erro de violação de chave primária se a tabela tiver uma chave primária.

        
Observação Esses problemas podem ocorrer em uma das seguintes situações:

  • Defina a opção de dica de consulta MAXDOP para um valor maior que 2.
  • Você define a opção Grau Máximo de paralelismo para um valor maior que 2 na configuração do servidor.

      

Resolução

Para resolver este problema, obtenha o service pack mais recente para o SQL Server 2008. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

968382 Como obter o service pack mais recente para o SQL Server 2008

Solução

Para contornar esse problema, use um dos seguintes métodos:

  • Ative o sinalizador de rastreio 4134 se tiver aplicado uma das seguintes atualizações:

    • Pacote de atualização cumulativa 6 para SQL Server 2008 ou um pacote de atualização cumulativa posterior para SQL Server 2008
    • Pacote de atualizações cumulativas 2 para o SQL Server 2008 Service Pack 1 (SP1) ou um pacote de atualização cumulativa posterior para o SQL Server 2008 SP1

    Para obter mais informações sobre como habilitar sinalizadores de rastreamento, visite o seguinte site da MSDN:

    Como ativar sinalizadores de rastreio

  • Consulte a secção "Solução" no artigo da Base de Dados de Conhecimento Microsoft 970198. 

    Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

    970198 CORRECÇÃO: Recebe um resultado incorrecto quando executa uma consulta que utiliza a função row_number no SQL Server 2008