Colonna identity e generazione id

domenica 08 gennaio 2012 - 15.10
Tag Elenco Tags  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server Express

andrestu Profilo | Expert

è una domanda abbastanza banale ma ne vorrei avere la certezza, il punto è questo:
ho creato una tabella con una colonna "id" impostata su identity - identity increment 1 - identity seed 1 in modo da farmi generare un int incrementale ad ogni inserimento.
Quando elimino un record e ne ricreo un altro, l'incremento non parte da quello precedente bensì dall'ultimo che è stato inserito e cioè se per esempio ho la seguente tabella:

id 1
id 2
...

ora elimino il record con id 2 e ne inserisco un altro, il nuovo record avrà id 3 e non id 2:

id 1
id 3
...

Vorrei semplicemente sapere se questo comportamento è implicito in Sql e non varia oppure può variare in base a qualche fattore tipo la versione di Sql o altro?
A me sta bene questa condizione purchè rimanga tale.
Grazie in anticipo

Andrea Restucci - Web Developer

lbenaglia Profilo | Guru

>Vorrei semplicemente sapere se questo comportamento è implicito
>in Sql e non varia oppure può variare in base a qualche fattore
>tipo la versione di Sql o altro?

Ciao Andrea,

Il comportamento è del tutto normale.
La proprietà IDENITITY e le nuove sequence che saranno introdotte con SQL Server 2012 non sono progettate per "colmare i buchi" ma generano automaticamente nuovi valori in base al seme ed al fattore di incremento specificati in fase di definizione.

>Grazie in anticipo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

andrestu Profilo | Expert

scusa visto che ci siamo mi potresti spiegare brevemente il significato di 'seed' in questo contesto?
ho sempre lasciato il valore di default 1 ma non ho capito a cosa serve...

aaaaaaa ok forse è il numero da cui parte la sequenza?

lbenaglia Profilo | Guru

>scusa visto che ci siamo mi potresti spiegare brevemente il significato
>di 'seed' in questo contesto?
>ho sempre lasciato il valore di default 1 ma non ho capito a
>cosa serve...
>
>aaaaaaa ok forse è il numero da cui parte la sequenza?
Esatto. Dai BOL:
"seed
Valore utilizzato per la prima riga caricata nella tabella".
http://msdn.microsoft.com/it-it/library/ms174639.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

andrestu Profilo | Expert

scusa volevo accettare la risposta ma non vedo più il pulsante "accetta"...

a ok ora è comparso
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5