6

ho pensato che fosse un bug, ma dopo aver letto questo articolo http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is, ho scoperto che si tratta di una nuova funzionalità di SQL Server 2012.In che modo la nuova funzione Identity Jump di Microsoft SQL Server 2012 gestisce l'intervallo del tipo di dati?

Questa funzione incrementa il tuo ultimo valore di colonna di identità da 1000 (INT) per nuove righe (10000 per bigints) automaticamente.

enter image description here

Sto ancora cercando la soluzione data in questo articolo, ma non ho alcun problema se questo salto avviene a lato client. Perché sto mostrando la versione hash degli ID al client. È la sua richiesta non mia.

Ma mi chiedo cosa succederebbe se i valori di queste colonne Identity superassero l'intervallo del tipo di dati (int o bigint)? Come gestisce l'intervallo e la dimensione della colonna?

+2

La soluzione nell'articolo è molto semplice e richiede 5 minuti. Ho applicato la soluzione * -t272 * e funziona perfettamente. –

risposta

4

Le colonne identità esistenti non funzioneranno con "Server: messaggio 8115, livello 16, stato 1, riga 2 Errore di overflow aritmetico durante la conversione dell'IDENTITÀ in tipo di dati int. Si è verificato un overflow aritmetico." Vedi http://www.sql-server-performance.com/2006/identity-integer-scope/ per la discussione.

Non c'è motivo di sospettare che Identity Jump abbia un comportamento diverso. Non vorrei che andasse a caccia di identità inutilizzate in una sequenza precedente.

+0

Grazie a questo link e http://stackoverflow.com/questions/13132939/what-happens-when-i-haust-a-bigint-generated-key-how-to-handle-it cancella la confusione.Anche se è un mysql domanda, ma fa un punto. Se sto aggiungendo i valori in modo incrementale a partire da zero, ci vorranno 300 milioni di anni e 67.108.863 terabyte di spazio libero. Perché il maxint max è 9223372036854775807.At 1000 inserti/secondo che vale 106751991167 giorni. Quasi 300 milioni di anni, come spiegato da @ CraigRinger. L'unico problema è quando si inserisce il limite massimo. Ma come il tuo articolo dice che aumenterà l'errore. –

2

Perché non utilizzare sequenza in MS Server 2012.

codice di esempio per la sequenza sarà la seguente e non avete bisogno il permesso ADMIN per creare Sequence.

CREATE SEQUENCE SerialNumber AS BIGINT 
START WITH 1 
INCREMENT BY 1 
MINVALUE 1 
MAXVALUE 9999999 
CYCLE; 
GO 

Nel caso in cui è necessario aggiungere l'principali '0' alla sequenza poi semplice farlo con seguente codice:

RIGHT ('0000' + CAST (NEXT VALUE FOR SerialNumber AS VARCHAR(5)), 4) AS SerialNumber 
-7

Il problema è stato risolto nella versione più recente degli aggiornamenti di SQL Server. Era un insetto.

Se si desidera ancora utilizzare la stessa versione, sarà necessario verificare la propria identità a intervalli e ricomporla con l'identità corrente se hanno superato il valore di 1000.

Questo script può aiutare a conoscere valori di inizializzazione, valori di incremento e attuale colonna di identità Valore http://blog.sqlauthority.com/2014/08/29/sql-server-query-to-find-seed-values-increment-values-and-current-identity-column-value-of-the-table-with-max-value-of-datatype-part-2/

Il mio suggerimento: applicare patch risentirsi, CU o service pack.

+4

Puoi collegarti a qualsiasi documentazione su questa correzione? Non vedo alcun aggiornamento recente all'elemento di connessione qui https://connect.microsoft.com/SQLServer/feedback/details/739013/failover-or-restart-results-in-reseed-of-identity sebbene affermi il problema con l'arresto del gestore di controllo verrà risolto a un certo punto. –

+5

Quale problema è stato risolto esattamente, non capisco. –