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

Traduções de Artigos Traduções de Artigos
Artigo: 970507 - Ver produtos para os quais este artigo se aplica.
A Microsoft distribui correcções Microsoft SQL Server 2008 como um ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova versão contém todas as correcções e todas as correcções de segurança incluídas com o SQL Server 2008 anterior corrigir lançamento.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Considere o seguinte cenário:
  • Tem o Microsoft SQL Server 2008 instalado num computador com múltiplos processadores.
  • Tem uma instrução SELECT de INSERT numa tabela que contém uma chave primária.

    Nota Na instrução INSERT SELECT , a tabela que recebe os dados é a mesma tabela exporta os dados. Por exemplo:
    INSERT T1 ? SELECT T1
  • Faz referência a outras tabelas nesta instrução INSERT SELECT . Estas referências incluem uma tabela temporária.

    Nota As tabelas são referenciadas na cláusula FROM ou as tabelas são referenciadas numa condição subconsulta ou associação.
Quando executa a declaração, 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 objecto ' TableName '.

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

Nota Este problema também ocorre quando executa a instrução SELECT UPDATE ou a instrução DELETE SELECT .

Causa

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

Resolução

Informações sobre a actualização cumulativa

A correcção para este problema foi disponibilizada pela primeira vez na actualização cumulativa 3 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre este pacote de actualização cumulativa, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
971491Pacote de actualização cumulativa 3 para SQL Server 2008 Service Pack 1
Nota Uma vez que as compilações são cumulativas, cada nova versão de correcção contém todas as correcções e todas as correcções de segurança incluídas com o SQL Server 2008 anterior corrigir lançamento. A Microsoft recomenda que considerar a aplicação a versão de correcção mais recente que contenha esta correcção. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
970365O SQL Server 2008 cria disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 correcções são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por predefinição, qualquer correcção fornecida num service pack do SQL Server está incluída no próximo service pack do SQL Server.

Informações sobre a correcção

Uma correcção suportada está agora disponível da Microsoft. Contudo, destina-se a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pelo próximo service pack do SQL Server 2008 que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa dos números de telefone de suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados, se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem na atualização específica em questão.

Pré-requisitos

Para aplicar esta correcção, tem de ter um computador que está a executar o SQL Server 2008 Service Pack 1 (SP1).

Informações sobre reinício

Não é necessário reiniciar o computador depois de aplicar esta correcção.

Informações de registo

Não é necessário alterar o registo.

Informações sobre ficheiros da correcção

Esta correcção contém apenas os ficheiros necessários para corrigir os problemas referidos neste artigo. Esta correcção poderá não conter todos os ficheiros que necessita para actualizar completamente um produto para a compilação mais recente.

A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas na hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário no item data e hora no painel de controlo.
Para todas 86 versões do SQL Server 2008 Database Engine x
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Sqlaccess.dll2007.100.2712.0405,35213 De Maio de 200917: 53x 86
Keyfile.dll2007.100.2712.013,65613 De Maio de 200915: 37x 86
Sqlservr.exe2007.100.2712.042,729,32013 De Maio de 200917: 56x 86
Para todas 86 versões do SQL Server 2008 Analysis Services x
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Msmdlocal.dll10.0.2712.023,461,72013 De Maio de 200916: 08x 86
Msmdsrv.exe10.0.2712.021,955,41613 De Maio de 200916: 09x 86
Keyfile.dll2007.100.2712.013,65613 De Maio de 200915: 37x 86
Msmdpump.dll10.0.2712.06,180,69613 De Maio de 200916: 08x 86
Msmdspdm.dll10.0.2712.0178,00813 De Maio de 200916: 08x 86
Msmgdsrv.dll10.0.2712.08,558,93613 De Maio de 200916: 09x 86
Msolap100.dll10.0.2712.06,532,95213 De Maio de 200916: 09x 86
Para todas x versões baseadas em 64 do SQL Server 2008 Database Engine
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Sqlaccess.dll2007.100.2712.0412,00814 De Maio de 200901: 15x 86
Keyfile.dll2007.100.2712.014,18413 De Maio de 200923: 55x 64
Sqlservr.exe2007.100.2712.057,873,25614 De Maio de 200901: 17x 64
Para todas x versões baseadas em 64 do SQL Server 2008 Analysis Services
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Msmdlocal.dll10.0.2712.023,461,72013 De Maio de 200916: 08x 86
Msmdlocal.dll10.0.2712.044,436,82414 De Maio de 200910: 00x 64
Msmdsrv.exe10.0.2712.043,713,36814 De Maio de 200910: 00x 64
Keyfile.dll2007.100.2712.014,18413 De Maio de 200923: 55x 64
Msmdpump.dll10.0.2712.07,430,48814 De Maio de 200910: 00x 64
Msmdspdm.dll10.0.2712.0178,02414 De Maio de 200910: 00x 86
Msmgdsrv.dll10.0.2712.08,558,93613 De Maio de 200916: 09x 86
Msmgdsrv.dll10.0.2712.012,332,37614 De Maio de 200911: 00x 64
Msolap100.dll10.0.2712.06,532,95213 De Maio de 200916: 09x 86
Msolap100.dll10.0.2712.08,153,94414 De Maio de 200911: 00x 64
Para todas as edições baseadas em Itanium do SQL Server 2008 Database Engine
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Sqlaccess.dll2007.100.2712.0398,69613 De Maio de 200917: 01x 86
Keyfile.dll2007.100.2712.019,30413 De Maio de 200915: 26IA-64
Sqlservr.exe2007.100.2712.0111,042,40813 De Maio de 200917: 08IA-64
Para todas as edições baseadas em Itanium do SQL Server 2008 Analysis Services
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Msmdlocal.dll10.0.2712.023,461,72013 De Maio de 200916: 08x 86
Msmdlocal.dll10.0.2712.057,508,18413 De Maio de 200915: 44IA-64
Msmdsrv.exe10.0.2712.058,860,88813 De Maio de 200915: 46IA-64
Keyfile.dll2007.100.2712.019,30413 De Maio de 200915: 26IA-64
Msmdpump.dll10.0.2712.08,943,44813 De Maio de 200915: 45IA-64
Msmdspdm.dll10.0.2712.0178,00813 De Maio de 200915: 45x 86
Msmgdsrv.dll10.0.2712.015,485,80013 De Maio de 200915: 47IA-64
Msmgdsrv.dll10.0.2712.08,558,93613 De Maio de 200916: 09x 86
Msolap100.dll10.0.2712.010,065,24013 De Maio de 200915: 47IA-64
Msolap100.dll10.0.2712.06,532,95213 De Maio de 200916: 09x 86

Como contornar

Para contornar este problema, defina a dica de consulta MAXDOP ou a opção MAXDOP para 1 à instrução ou o nível de servidor.

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

Ponto Da Situação

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

Referências

Para obter mais informações sobre o modelo de assistência incremental para o SQL Server, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
935897Um modelo de assistência incremental está disponível a equipa do SQL Server para proporcionar correcções para problemas comunicados


Para obter mais informações sobre o esquema de atribuição de nomes para as actualizações do SQL Server, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
822499Novo esquema de atribuição de nomes de ficheiros para pacotes de actualização de software do Microsoft SQL Server


Para obter mais informações sobre a terminologia de actualização de software, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 970507 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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