CORRECÇÃO: Mensagem de erro no SQL Server 2008 quando você executa uma instrução INSERT SELECT em uma tabela: "violação de restrição PRIMARY KEY '<primarykey>'. Não é possível inserir chave duplicada no objeto '<tablename>' "

Traduções deste artigo Traduções deste artigo
ID do artigo: 970507 - Exibir os produtos aos quais esse artigo se aplica.
A Microsoft distribui correções do Microsoft SQL Server 2008 como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as correções segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Considere o seguinte cenário:
  • Você tem o Microsoft SQL Server 2008 instalado em um computador multiprocessador.
  • Você tem uma instrução INSERT SELECT em uma tabela que contém uma chave primária.

    Observação Na instrução INSERT SELECT , a tabela que recebe os dados é a mesma tabela que gera os dados. Por exemplo:
    INSERT T1 ? SELECT T1
  • Você fazer referência a outras tabelas nessa instrução INSERT SELECT . Essas referências incluem uma tabela temporária.

    Observação As tabelas são referenciadas na cláusula FROM ou as tabelas são referenciadas em uma condição de associação ou subconsulta.
Quando você executa a instrução, você receber a seguinte mensagem de erro:

Msg 2627, nível 14, estado 1
Violação de restrição PRIMARY KEY ' PrimaryKey '. Não é possível inserir chave duplicada no objeto ' TableName '.

Se você examinar o plano de execução, você encontrar o operador JOIN e o operador Spool adiantado executam em paralelo. Este operador Spool adiantado está sob o operador JOIN . Além disso, a tabela que recebe os dados na instrução é a tabela interna da associação.

Observação Esse problema também ocorre quando você executar a instrução SELECT UPDATE ou a instrução DELETE SELECT .

Causa

Esse problema ocorre devido a um erro no spool para o operador Spool adiantado onde o spool gera mais linhas que o esperado. Esse comportamento faz com que um problema de chave duplicado.

Resolução

Informações da atualização cumulativa

A correção para esse problema foi lançada primeiro na atualização cumulativa 3 para o SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
971491Pacote de atualizações cumulativas 3 para SQL Server 2008 Service Pack 1
Observação Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. A Microsoft recomenda que você considere a aplicação a versão de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
970365Compilações do SQL Server 2008 que foram lançadas lançamento após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 hotfixes são criados para service packs do SQL Server específicos. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por padrão, qualquer hotfix fornecidas em um SQL Server service pack está incluído no service pack seguinte do SQL Server.

Informações sobre o hotfix

Um hotfix com suporte foi disponibilizada pela Microsoft. No entanto, destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo service pack do SQL Server 2008 que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Microsoft Customer Atendimento para obter o hotfix. Para obter uma lista completa de telefones do serviço de suporte a clientes da Microsoft e informações sobre os custos de suporte, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

Pré-requisitos

Para aplicar esse hotfix, você deve ter um computador que está executando o SQL Server 2008 Service Pack 1 (SP1).

Informações sobre reinicialização

Não é necessário reiniciar o computador após aplicar esse hotfix.

Informações do registro

Não é necessário alterar o registro.

Informações sobre o arquivo de hotfix

Esse hotfix contém apenas os arquivos que são necessárias para corrigir os problemas que este artigo lista. Este hotfix pode não conter todos os arquivos que você deve ter para actualizar completamente um produto para a compilação mais recente.

A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas no horário de universal coordenado (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário no item Data e hora no painel de controle.
Para todas as versões do SQL Server 2008 Database Engine com base em 86 x
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Sqlaccess.dll2007.100.2712.0405,35213-Mai-200917: 53x 86
Keyfile.dll2007.100.2712.013,65613-Mai-200915: 37x 86
Sqlservr.exe2007.100.2712.042,729,32013-Mai-200917: 56x 86
Para todas as versões com base em 86 x do SQL Server 2008 Analysis Services
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Msmdlocal.dll10.0.2712.023,461,72013-Mai-200916: 08x 86
Msmdsrv.exe10.0.2712.021,955,41613-Mai-200916: 09x 86
Keyfile.dll2007.100.2712.013,65613-Mai-200915: 37x 86
Msmdpump.dll10.0.2712.06,180,69613-Mai-200916: 08x 86
Msmdspdm.dll10.0.2712.0178,00813-Mai-200916: 08x 86
Msmgdsrv.dll10.0.2712.08,558,93613-Mai-200916: 09x 86
Msolap100.dll10.0.2712.06,532,95213-Mai-200916: 09x 86
Para todas as versões com base em 64 x do SQL Server 2008 Database Engine
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Sqlaccess.dll2007.100.2712.0412,00814-Mai-200901: 15x 86
Keyfile.dll2007.100.2712.014,18413-Mai-200923: 55x 64
Sqlservr.exe2007.100.2712.057,873,25614-Mai-200901: 17x 64
Para todas as versões com base em 64 x do SQL Server 2008 Analysis Services
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Msmdlocal.dll10.0.2712.023,461,72013-Mai-200916: 08x 86
Msmdlocal.dll10.0.2712.044,436,82414-Mai-200900: 10x 64
Msmdsrv.exe10.0.2712.043,713,36814-Mai-200900: 10x 64
Keyfile.dll2007.100.2712.014,18413-Mai-200923: 55x 64
Msmdpump.dll10.0.2712.07,430,48814-Mai-200900: 10x 64
Msmdspdm.dll10.0.2712.0178,02414-Mai-200900: 10x 86
Msmgdsrv.dll10.0.2712.08,558,93613-Mai-200916: 09x 86
Msmgdsrv.dll10.0.2712.012,332,37614-Mai-200911: 00x 64
Msolap100.dll10.0.2712.06,532,95213-Mai-200916: 09x 86
Msolap100.dll10.0.2712.08,153,94414-Mai-200911: 00x 64
Para todas as versões baseadas em Itanium do SQL Server 2008 Database Engine
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Sqlaccess.dll2007.100.2712.0398,69613-Mai-200917: 01x 86
Keyfile.dll2007.100.2712.019,30413-Mai-200915: 26IA-64
Sqlservr.exe2007.100.2712.0111,042,40813-Mai-200917: 08IA-64
Para todas as versões com base em Itanium do SQL Server 2008 Analysis Services
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Msmdlocal.dll10.0.2712.023,461,72013-Mai-200916: 08x 86
Msmdlocal.dll10.0.2712.057,508,18413-Mai-200915: 44IA-64
Msmdsrv.exe10.0.2712.058,860,88813-Mai-200915: 46IA-64
Keyfile.dll2007.100.2712.019,30413-Mai-200915: 26IA-64
Msmdpump.dll10.0.2712.08,943,44813-Mai-200915: 45IA-64
Msmdspdm.dll10.0.2712.0178,00813-Mai-200915: 45x 86
Msmgdsrv.dll10.0.2712.015,485,80013-Mai-200915: 47IA-64
Msmgdsrv.dll10.0.2712.08,558,93613-Mai-200916: 09x 86
Msolap100.dll10.0.2712.010,065,24013-Mai-200915: 47IA-64
Msolap100.dll10.0.2712.06,532,95213-Mai-200916: 09x 86

Como Contornar

Para contornar esse problema, defina a dica de consulta MAXDOP ou a opção MAXDOP para 1 na instrução ou no nível do servidor.

Observação O nível de servidor opção MAXDOP afeta o desempenho de todas as consultas executadas no servidor.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Referências

Para obter mais informações sobre o modelo incremental de serviços para o SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
935897Há um modelo incremental de serviços da equipe do SQL Server para fornecer hotfixes para problemas relatados


Para obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL Server


Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Propriedades

ID do artigo: 970507 - Última revisão: sexta-feira, 24 de julho de 2009 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Workgroup
Palavras-chave: 
kbmt kbsurveynew kbfix kbqfe kbexpertiseadvanced kbhotfixserver KB970507 KbMtpt
Tradução automática
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: 970507

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com