Sl server id autoincrement

sabato 06 febbraio 2016 - 10.48
Tag Elenco Tags  VB.NET

trinity Profilo | Guru

Salve buongiorno

è possibile in una tabella con colonna id autoincrement di riorganizzare il contatore lasciando i dati nel db?

Mi spiego ho dovuto eliminare moltissimi record ed ora se vado ad inserire dei nuovi record il contatore parte giustamente dall'ultimo valore inserito io vorrei lasciando i dati in archivio di poter riorganizzare il contatore e farlo partire dal numero reale di record che la tabella contiene. Si può fare?

Se no cosa mi consigliate di fare?

Grazie
Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Amodio Profilo | Expert

non vedo il problema, pure se il contatore arriva a 50000 tanto se lo gestisce lui e il tuo programma,

giusto nel caso
dovresti cambiare il contatore in un semplice int
poi cambiarli tutti con una UPDATE potresti rinumerarle con una ROW_NUMBER()
il problema è poi vedere se accetta di riconvertire il campo in auto_number, ma puoi fare una prova in una tabella nuova e vedere

alx_81 Profilo | Guru

>Salve buongiorno
ciao

>è possibile in una tabella con colonna id autoincrement di riorganizzare il contatore lasciando i dati nel db?
>Mi spiego ho dovuto eliminare moltissimi record ed ora se vado
>ad inserire dei nuovi record il contatore parte giustamente dall'ultimo
>valore inserito io vorrei lasciando i dati in archivio di poter
>riorganizzare il contatore e farlo partire dal numero reale di
>record che la tabella contiene. Si può fare?
no, non puoi, ma l'identità non nasce per dare sequenza, ma per generare valori sempre incrementanti, e quindi univoci.
Per questo l'identità non dovrebbe mai essere esposta all'esterno, perchè è un campo AD USO INTERNO.
Se ti serve una numerazione progressiva tecnica sempre seguente, o utilizzi SQL Server 2012 e le sue SEQUENCES oppure applichi delle espressioni in inserimento.
Ci sono dei trick, come la simulazione dell'identità, ovvero creare una tabella che contiene il progressivo massimo inserito, e poi, ad ogni insert, fai il +1 di quel valore.
In questo modo la soluzione scala.
Soluzioni più semplici sono applicare la MAX(tuo_id) + 1, ma all'aumentare dei record hai sempre più peso nella query che ricava il valore massimo.
Se è perchè esponi quel campo e ti serve la serie, dovrai cambiare approccio, se invece si tratta di "stile" perchè ti danno fastidio i buchi, credo tu te ne debba fare una ragione.
Per evitare di non utilizzare tutto il tipo di dato, inoltre, puoi pensare di non partire da zero la prossima volta, per sfruttare al massimo l'estensione del tipo di dato dell'identità.

>Grazie
di nulla!
Alessandro Alpi | MS Data Platform MVP | Engage IT Services s.r.l.
MCP|MCITP|MCTS|MCT
http://www.engageitservices.it
http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5