In un computer con Microsoft Data Access Components 2.8, un'applicazione riceve un valore non corretto per la colonna di identità da un database di SQL Server 2005

Il supporto per Windows XP è terminato

Il supporto Microsoft per Windows XP è terminato l'8 aprile 2014. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Il supporto per Windows Server 2003 è terminato il 14 luglio 2015.

Microsoft ha sospeso il supporto per Windows Server 2003 in data 14 luglio 2015. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 940569
Sintomi
Si consideri lo scenario seguente. È creare una tabella che include una colonna identity in un database di Microsoft SQL Server 2005. È possibile configurare una replica di tipo merge nella tabella. Un'applicazione utilizza Microsoft ActiveX Data Objects (ADO) per inserire una riga nella tabella. Quindi, l'applicazione recupera la riga inserita. Tuttavia, un valore non corretto viene restituito per la colonna identity.

Questo problema si verifica quando il computer che esegue l'applicazione dispone di uno dei seguenti installate:
  • Windows Server 2003
  • Windows XP
  • Microsoft Data Access Components 2.8 (MDAC 2.8)
Questo problema non si verifica in un database di Microsoft SQL Server 2000.
Cause
Il processo di replica crea trigger di inserimento nella tabella. Quando dati vengono inseriti nella tabella, i trigger di inserimento utilizzano il @@ IDENTITY variabile anziché la funzione SCOPE_IDENTITY . Di conseguenza, per il @@ IDENTITY variabile potrebbe restituire un valore di identità non è nella tabella corrente.
Risoluzione
Per risolvere questo problema, è necessario installare l'hotfix descritto nell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
961451FIX: È visualizzato un valore non corretto quando il valore identity inserito l'ultimo si esegue query dopo aver utilizzato un cursore sul lato client, per inserire dati in una tabella contenente una colonna identity in un'applicazione che utilizza ActiveX Data Objects
Nota L'aggiornamento rapido è stato descritto nella sezione "Risoluzione" nella versione precedente di questo articolo è stato sostituito dall'hotfix descritto in 961451.
Status
Microsoft ha confermato che questo problema riguarda i prodotti sono elencati nella sezione "Si applica a".
Informazioni
La funzione SCOPE_IDENTITY e il @@ IDENTITY variabile restituiscono gli ultimi valori di identità, che vengono generati in qualsiasi tabella della sessione corrente. Tuttavia, la funzione SCOPE_IDENTITY restituisce i valori vengono inseriti solo all'interno dell'ambito corrente. Il @@ IDENTITY variabile non limita l'inserimento a un ambito specifico.

Si supponga ad esempio, che il database contiene un Table1 e Table2 un. Entrambe le tabelle includere colonne di identità. Un trigger di inserimento è definito in Table1. Quando viene inserita una riga in Table1, il trigger inserisce una copia della riga in tabella2. Questo scenario prevede i seguenti due ambiti:
  • Inserimento in Table1
  • Inserimento in Table2 dal trigger
In questo scenario, il @@ IDENTITY variabile e la funzione SCOPE_IDENTITY restituiscono valori di diversi quando viene inserita una riga in Table1. Il @@ IDENTITY variabile restituisce l'ultimo valore di colonna del identità che viene inserito in tutti gli ambiti nella sessione corrente. In questo caso, il @@ IDENTITY variabile restituisce valore identity inserito in tabella2. Tuttavia, è possibile che la funzione SCOPE_IDENTITY restituisce il valore identità che viene inserito in Table1, poiché la funzione SCOPE_IDENTITY restituisce il valore che viene inserito l'ultimo nello stesso ambito. La funzione SCOPE_IDENTITY restituisce il valore NULL se la funzione viene richiamata prima tutte le istruzioni INSERT apportate a una colonna di identità nell'ambito.

Per ulteriori informazioni sulla terminologia di aggiornamento software, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
824684Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 940569 - Ultima revisione: 08/25/2009 16:09:56 - Revisione: 2.0

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

  • kbmt kbautohotfix kbwinxppresp3fix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbhotfixserver kbqfe KB940569 KbMtit
Feedback