FIX: Dati della colonna possono essere eliminati quando si aggiorna un'altra colonna di lunghezza variabile in una tabella di un database aggiornato da SQL Server 2005

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 3120595
Sintomi
Quando si aggiorna un valore in una colonna di lunghezza variabile in una tabella di un database che è stato aggiornato da Microsoft SQL Server 2005, vengono eliminati i dati in un'altra colonna di lunghezza variabile nella stessa riga.

Questo problema si verifica in Microsoft SQL Server 2014 e Microsoft SQL Server 2012. Il seguente scenario può esporre un database a questo problema. Questo elenco rappresenta una sequenza di eventi:

  • Viene creato un database in SQL Server 2005.
  • Modifica di una tabella in SQL Server 2005, e quindi si rilascia una o più colonne di lunghezza variabile, alla fine della definizione della tabella.
  • Aggiungere nuove colonne di lunghezza variabile che dispongono di un tipo di dati e lunghezza delle colonne rilasciate simili.
  • Il database viene aggiornato da SQL Server 2005 a SQL Server 2014 o SQL Server 2012.
  • I dati aggiornati sono un overflow in una nuova pagina si aggiorna successivamente il valore di un'altra colonna di lunghezza variabile.
In questo scenario, i dati in una o più delle colonne appena aggiunte nella stessa riga possono essere eliminati.

È possibile utilizzare lo script di Ulteriori informazioni sezione per verificare quanto segue:

  • Se tutte le tabelle in un determinato database sono eliminate le colonne di lunghezza variabile
  • Se ulteriori colonne di lunghezza variabile sono state create con corrispondenti offset
Nota Questo problema non viene individuato da DBCC CHECKDB.
Risoluzione
Nota Questa correzione impedisce solo le occorrenze future del problema.

Importante Se si sta aggiornando il database da SQL Server 2005 a SQL Server 2014 o SQL Server 2012, assicurarsi di fare riferimento alla sezione "Workaround".

Questo problema è stato corretto nell'aggiornamento cumulativo per SQL Server seguente:

Questi sono gli ultimi aggiornamenti cumulativi per queste versioni del programma.

Raccomandazioni: Installare l'aggiornamento cumulativo più recente per SQL Server 2014 o SQL Server 2012

Installazione di ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutte le correzioni di protezione che sono stati inclusi nell'aggiornamento cumulativo precedente. Estrarre gli ultimi aggiornamenti cumulativi per SQL Server:



Nota Per ulteriori informazioni sulle compilazioni più recenti di SQL Server, vedere Dove trovare informazioni il più recente di SQL Server compila.
Workaround
Importante Applicare questa soluzione alternativa quando si aggiorna il database da SQL Server 2005 a 2014 di SQL Server o SQL Server 2012 e prima che le istruzioni UPDATE da eseguire nel database aggiornato.

Per risolvere questo problema se si eliminano le colonne in una tabella, assicurarsi di eseguire una delle seguenti prima di aggiornare o eliminare le righe:

  • La ricostruzione dell'indice cluster utilizzando ALTER INDEX (...) RICOSTRUIRE
  • Ricostruire l'heap utilizzando l'istruzione ALTER TABLE (...) RICOSTRUIRE

Informazioni
È possibile utilizzare lo script seguente per verificare se tutte le tabelle in un determinato database sono eliminate le colonne che sono potenzialmente interessate dal problema.

Nota Se lo script non restituisce alcuna riga, il che significa che il problema non attualmente applicate a qualsiasi tabella del sistema.
SELECT DISTINCT OBJECT_NAME(sp.[object_id]) AS TableWithDroppedColsFROM sys.system_internals_partition_columns sipc1 WITH (NOLOCK)INNER JOIN sys.system_internals_partition_columns sipc2 WITH (NOLOCK)       ON sipc1.[partition_id] = sipc2.[partition_id] AND              sipc1.leaf_offset = sipc2.leaf_offset AND              sipc1.leaf_offset < 0 AND               sipc1.is_dropped < sipc2.is_droppedINNER JOIN sys.partitions sp WITH (NOLOCK) ON sipc1.[partition_id] = sp.[partition_id];

Importante Questo script deve essere utilizzato solo per lo scopo e ambito di questo articolo.
Status
Microsoft ha confermato che questo è un problema per i prodotti Microsoft elencati nella sezione "Si applica a".

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 3120595 - Ultima revisione: 05/31/2016 08:51:00 - Revisione: 11.0

Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3120595 KbMtit
Feedback