Em um computador que tenha o Microsoft Data Access Components 2.8 instalado, um aplicativo recebe um valor incorreto para a coluna de identidade de um banco de dados do SQL Server 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 940569 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sintomas

Considere o seguinte cenário. Criar uma tabela que possui uma coluna de identidade em um banco de dados do Microsoft SQL Server 2005. Você pode configurar a replicação de mesclagem na tabela. Um aplicativo usa o Microsoft ActiveX Data Objects (ADO) para inserir uma linha na tabela. Em seguida, o aplicativo recupera a linha inserida. No entanto, um valor incorreto é retornado para a coluna de identidade.

Esse problema ocorre quando o computador que executa o aplicativo tem um dos seguintes instalados:
  • Windows Server 2003
  • Windows XP
  • Microsoft Data Access Components 2.8 (MDAC 2.8)
Esse problema não ocorre em um banco de dados do Microsoft SQL Server 2000.

Causa

O processo de replicação cria disparadores de inserção na tabela. Quando dados são inseridos na tabela, os disparadores insert usar @@ IDENTITY variável em vez da função SCOPE_IDENTITY . Portanto, o @@ IDENTITY variável pode retornar um valor de identidade que não esteja na tabela atual.

Resolução

Para resolver esse problema, instale o hotfix descrito no seguinte artigo da Base de dados de Conhecimento Microsoft:
961451CORRECÇÃO: Recebe um valor incorreto quando você consulta o valor inserido última identidade após usar um cursor ao lado do cliente para inserir dados em uma tabela que contém uma coluna de identidade em um aplicativo que usa ActiveX Data Objects
Observação O hotfix que foi descrito na seção "Resolução" na versão anterior deste artigo é substituído pelo hotfix descrito no 961451.

Situação

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

Mais Informações

A função SCOPE_IDENTITY e @@ IDENTITY variável retornar os valores de identidade últimos que são gerados em qualquer tabela na sessão atual. No entanto, a função SCOPE_IDENTITY retorna valores que são inseridos somente dentro do escopo atual. @@ IDENTITY variável não limita a inserção para um escopo específico.

Por exemplo, suponha que o banco de dados contém um Tabela1 e um Tabela2. Ambas as tabelas têm colunas de identidade. Um disparador de inserção é definido na tabela 1. Quando uma linha é inserida na tabela 1, o disparador insere uma cópia da linha em Tabela2. Esse cenário envolve os seguintes dois escopos:
  • Inserção na tabela 1
  • Inserção em Tabela2 pelo disparador
Nesse cenário, @@ IDENTITY variável e a função SCOPE_IDENTITY retornam valores diferentes quando uma linha é inserida na tabela 1. @@ IDENTITY variável retorna o último valor de coluna de identidade que é inserido entre os escopos na sessão atual. Nesse caso, @@ IDENTITY variável retorna o valor de identidade que é inserido no Tabela2. No entanto, a função SCOPE_IDENTITY retorna o valor de identidade que é inserido na tabela 1, porque a função SCOPE_IDENTITY retorna o valor que é inserido pela última vez no mesmo escopo. A função SCOPE_IDENTITY retorna o valor NULL se a função for chamada antes que quaisquer instruções INSERT que são feitas em uma coluna de identidade ocorrem no escopo.

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: 940569 - Última revisão: terça-feira, 25 de agosto de 2009 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional x64 Edition
  • Microsoft Data Access Components 2.8
Palavras-chave: 
kbmt kbautohotfix kbwinxppresp3fix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbhotfixserver kbqfe KB940569 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: 940569

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