Sto utilizzando il server Sql 2012 (Denali). Mi chiedo semplicemente perché tutti i valori delle colonne identità iniziano da 1001 e così via. All'inizio la colonna Identity inizia da 1,2 e così via e aggiunge identità senza problemi, ma improvvisamente salta a 1001,1002 e in avanti per tutta la tabella nel database contenente la colonna Identity. Quale potrebbe essere la ragione. Si prega di aiutare.Il valore della colonna Identity passa improvvisamente a 1001 nel server sql
risposta
Microsoft ha cambiato il modo in cui gestiscono i valori di identità in SQL Server 2012 e, di conseguenza, è possibile visualizzare gli spazi di identità tra i record dopo aver riavviato l'istanza del server SQL o il computer server. Potrebbero esserci altri motivi per questo intervallo di identificazione, potrebbe essere dovuto al riavvio automatico del server dopo l'installazione di un aggiornamento.
causerà un record di log da generare per ogni valore di identità generato È possibile utilizzare sotto due scelte
- Utilizzare il flag di traccia 272 o Questo. Le prestazioni della generazione dell'identità possono essere influenzate attivando questo flag di tracciamento.
utilizzare un generatore di sequenza con l'impostazione
NO CACHE Impostazione flag di traccia 272 su SQL Server 2012 che vi aspettate qui
Open "di SQL Server Configuration Manager"
- Fare clic su "SQL Server Servizi "nel riquadro sinistro
- Fare clic con il pulsante destro del mouse sul nome dell'istanza di SQL Server nel riquadro di destra -> Predefinito: SQL Server (MSSQLSERVER)
- Fare clic su" Proprietà "
- Clicca "Parametri di avvio"
- Sul "specificare un parametro di avvio" tipo di testo "-T272"
- Fare clic su "Aggiungi"
- confermare le modifiche
+1 per una buona spiegazione. Grazie mille –
Qui di seguito è una citazione da un post di Microsoft risponde a questo problema crisi id su "connect": Se si richiede la stessa semantica generazione identità di precedenti versioni di SQL Server sono disponibili due opzioni disponibili: Usa flag di traccia 272 => Ciò causerà la generazione di un record di log per ogni valore di identità generato. Le prestazioni della generazione dell'identità potrebbero essere influenzate dall'attivazione di questo flag di traccia. –
utilizzare un generatore di sequenza con l'impostazione NO CACHE (http://msdn.microsoft.com/en-us/library/ff878091.aspx) => Ciò causerà un record di registro da generare per ogni valore sequenza generata. Si noti che le prestazioni della generazione del valore di sequenza possono essere influenzate dall'utilizzo di NO CACHE. –
Credo che tu abbia la spiegazione in un commento a questo elemento di connessione. Failover or Restart Results in Reseed of Identity
per rilanciare l'preformance per le macchine di fascia alta, si introduce preallocazione per il valore di identità nel 2012. E questa caratteristica può essere disabilitato utilizzando TF 272 (allora si otterrà il comportamento da 2008R2).
Le proprietà dell'identità vengono memorizzate separatamente nei metadati. Se viene utilizzato un valore nell'identità e viene chiamato l'incremento, verrà impostato il nuovo valore di inizializzazione . Nessuna operazione, incluso Rollback, Failover, ... può cambiare il valore di seed eccetto DBCC reseeding. Il failover si applica all'oggetto tabella , ma non all'oggetto identità. Pertanto, per il failover, è possibile eseguire il checkpoint di chiamata prima del failover manuale, ma è possibile che si verifichi un gap per i casi non pianificati . Se gap è un problema, allora io suggerire di utilizzare TF 272.
Per il controllo direttore arresto, abbiamo una soluzione per il prossimo verion (con un'altra TF). Questa correzione si prenderà cura della maggior parte dei casi di arresto del gestore di controllo .
Come evitare questa situazione –
@eraj abilitare TF 272 come descritto in un commento dello stesso articolo di connessione. –
@eraj - come ho detto in un commento alla tua domanda, se * ti preoccupi * dei valori numerici, stai usando 'IDENTITY' errato. –
Credo che si potrebbe utilizzare la sequenza, invece, la sequenza si dà il 100% il controllo completo, ed è per molti versi di gran lunga superiori rispetto alle identità ... identità è così dannatamente facile e conveniente
http://msdn.microsoft.com/en-us/library/ff878091.aspx
Per quanto ne so, quando si esegue un inserto con l'identità e non riesce, l'identità viene utilizzato in ogni caso, Verified
con la sequenza si può fare "riempire" le lacune utilizzando ciclo . Anche se, come sottolinea Amy Barrett, questo viene creato al di fuori della portata della transazione.
C'è un ottimizzazione delle prestazioni quando si utilizza la cache che potrebbe essere utile pure.
Solo nel caso qualcun altro sta leggendo questa, la pagina di Microsoft (legato nella tua risposta) dice _ "I numeri di sequenza vengono generati al di fuori del campo di applicazione della transazione corrente, vengono consumati indipendentemente dal fatto che la transazione che utilizza il numero di sequenza sia impegnata o ripristinata. "_ in Note generali, quindi presumo che il numero di sequenza sia utilizzato indipendentemente dall'inserto successo/errore. –
- 1. Sql Server restituisce il valore della colonna Identity dopo l'istruzione insert
- 2. SQL Server query improvvisamente lento
- 3. Linq to SQL - Come trovare il valore della colonna IDENTITY dopo InsertOnSubmit()
- 4. Come cadere proprietà IDENTITY di colonna in SQL Server 2005
- 5. Aumentare il valore di una colonna Identity in SQL Server senza rilasciare e ricreare la tabella
- 6. Colonna DateCreated nel server Sql?
- 7. Odd SQL Server 2012 problema IDENTITY
- 8. Aggiungi colonna Identity per una vista in SQL Server 2008
- 9. Valore massimo della colonna Identity nei DB SQLite
- 10. Restituzione del valore della colonna Identity dopo l'inserimento in Oracle
- 11. SQL Server Concatena il valore della colonna stringa a 5 caratteri long
- 12. SQL Server: come aggiungere una nuova colonna Identity e popolare la colonna con id?
- 13. Trova il valore massimo e mostra il valore corrispondente da un campo diverso nel server SQL
- 14. sql server: richiama il valore predefinito di una colonna
- 15. SQL Server nome della colonna non valido quando si aggiunge valore stringa
- 16. SQL: Ottenere rapidamente il valore della colonna B dovunque la colonna A è minima
- 17. Imposta esplicitamente il valore della colonna su null SQL Developer
- 18. Hibernate e colonna MS SQL Server Identità
- 19. Parametro opzionale nel server SQL
- 20. Come creare una tabella con colonna Identity
- 21. sostituire NULL con valore Vuoto o Zero nel server sql
- 22. Linq-to-SQL ignora il valore predefinito di SQL Server
- 23. Come selezionare una colonna in SQL Server con un carattere speciale nel nome della colonna?
- 24. SQL Server - la procedura memorizzata diventa improvvisamente lenta
- 25. SUM Colonna SQL SERVER
- 26. query SQL ottenere nome della colonna Null
- 27. Trova se il valore nella colonna A contiene il valore della colonna B?
- 28. Sintassi della formula della colonna calcolata del server Sql
- 29. SQL Server 2008 - Passa da Seleziona a modifica rapida
- 30. Entity Framework: Problema con IDENTITY_INSERT - "Impossibile inserire il valore esplicito per la colonna Identity nella tabella"
Se avete a cuore i valori numerici assegnato a una colonna di identità, stai facendo qualcosa * sbagliato *. È necessario trattare i valori di identità come BLOB opachi che si è appena riusciti a memorizzare nelle colonne 'int' (o altri tipi numerici). –
Sì tipo di dati per tutti quelli che sono 'int' –