Num computador com o Microsoft Data Access Components 2.8 instalado, uma aplicação recebe um valor incorrecto para a coluna de identidade de uma base de dados do SQL Server 2005

Traduções de Artigos Traduções de Artigos
Artigo: 940569 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

Considere o seguinte cenário. Criar uma tabela que tem uma coluna de identidade numa base de dados Microsoft SQL Server 2005. Configurou uma replicação de intercalação na tabela. Uma aplicação utiliza Microsoft ActiveX Data Objects (ADO) para inserir uma linha na tabela. Em seguida, a aplicação obtém a linha inserida. No entanto, é devolvido um valor incorrecto para a coluna de identidade.

Este problema ocorre quando o computador que executa a aplicação tem um dos seguintes programas instalado:
  • Windows Server 2003
  • Windows XP
  • Microsoft Data Access Components 2.8 (MDAC 2.8)
Este problema não ocorre numa base de dados do Microsoft SQL Server 2000.

Causa

O processo de replicação cria accionadores de inserção na tabela. Quando são introduzidos dados na tabela, os accionadores de inserir utilizam @@ IDENTITY variável em vez da função SCOPE_IDENTITY . Por conseguinte, o @@ IDENTITY variável pode devolver um valor de identidade que não está na tabela actual.

Resolução

Para resolver este problema, instale a correcção descrita no seguinte artigo da base de dados de conhecimento da Microsoft:
961451CORRECÇÃO: Recebe um valor incorrecto quando consulta o valor inserido última identidade depois de utilizar um cursor do lado do cliente para inserir dados a uma tabela que contém uma coluna de identidade numa aplicação que utiliza o ActiveX Data Objects
Nota A correcção que foi descrita na secção "Resolução" na versão anterior deste artigo foi substituída pela correcção descrita no 961451.

Ponto Da Situação

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

Mais Informação

A função SCOPE_IDENTITY e @@ IDENTITY variável devolver os últimos valores de identidade que são gerados em qualquer tabela na sessão actual. No entanto, a função SCOPE_IDENTITY devolve valores que são inseridos apenas dentro do âmbito actual. @@ IDENTITY variável não limita a inserção para um âmbito específico.

Por exemplo, suponha que a base de dados contém uma tabela1 e um tabela2. Ambas as tabelas tem colunas de identidade. Um accionador de inserção está definido no tabela1. Quando uma linha é inserida no tabela1, o accionador insere uma cópia da linha de tabela2. Este cenário envolve os seguintes dois âmbitos:
  • Inserção de tabela1
  • Inserção de tabela2 pelo accionador
Neste cenário, @@ IDENTITY variável e a função SCOPE_IDENTITY devolvem valores diferentes quando uma linha é inserida no tabela1. @@ IDENTITY variável devolve o último valor de coluna de identidade que é inserido entre quaisquer âmbitos na sessão actual. Neste caso, @@ IDENTITY variável devolve o valor identidade que é inserido no tabela2. No entanto, a função SCOPE_IDENTITY devolve o valor de identidade é inserido no tabela1, uma vez que a função SCOPE_IDENTITY devolve o valor que é inserido pela última vez no mesmo âmbito. A função SCOPE_IDENTITY devolve o valor NULL se a função é chamada antes de ocorrem qualquer instruções INSERT efectuadas a uma coluna de identidade no âmbito.

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: 940569 - Última revisão: 25 de agosto de 2009 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • 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 Edition
  • 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 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: 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