Applies ToSQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Sintomi

Si supponga di aggiungere una colonna a una tabella in Microsoft SQL Server 2012 o SQL Server 2014. Quando la dimensione della riga è vicina alla dimensione massima consentita che è di 8.060 byte, l'operazione di aggiunta può richiedere molto tempo.

Causa

Il problema si verifica perché, quando la dimensione totale della riga è vicina alla dimensione massima consentita, SQL Server esegue un'analisi completa della tabella per verificare che l'aggiunta di una nuova colonna non violi l'integrità dei dati. Le versioni precedenti a SQL Server 2012 non eseguono questo controllo e il linguaggio DDL (Data Definition Language) viene eseguito più rapidamente. Tuttavia, questo comportamento genera l'errore delle operazioni successive, ad esempio l'aggiornamento delle righe o la riduzione delle dimensioni delle righe, se la dimensione della riga supera quella consentita.

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:

Ulteriori informazioni

  • Puoi attivare il contrassegno di traccia 647 usando il parametro Startup. Per informazioni, vedere Opzioni di avvio del servizio motore di database.

  • Puoi eseguire la query seguente (Sostituisci <nome tabella> con il nome di tabella effettivo) per testare la tabella specifica prima dell'operazione in un sistema di produzione e pianificare l'effetto del problema. Se il risultato è maggiore di 8.060, la tabella è soggetta al problema. Inoltre, se sono state eliminate colonne, è necessario modificare la tabella con l'opzione Rigenera. La ricostruzione della tabella può rendere la query restituire risultati corretti.

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • È possibile valutare l'aggiunta di colonne di lunghezza variabile o colonne di tipo sparse quando l'applicazione aggiunge di frequente nuove colonne alla tabella. Si tratta di un'operazione solo per i metadati, anche se la dimensione totale di tutte le colonne supera i 8.060 byte.

Stato

Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.