Indicizzazione di una chiave primaria in SQL Server express 2005

martedì 01 aprile 2008 - 13.33

86Marco Profilo | Expert

Salve,
ho da poco cominciato lo studio di sql server 2005 express.
Ho creato una tabella con campi e ho settato la chiave primaria con tipo di dato int, ho settato la colonna come identità e con incremento identità di 1!
Nel momento però in cui vado fisicamente a scrivere i dati all'interno della tabella la numerazione risulta per i fatti suoi.
In particolare mi si sono creati i seguenti indici:
2, 4, 6, 7, 9, 10, 13.
Per quale motivo??????
Come si fa per avere i dati incrementati di 1 ogni volta?
in più c'è un modo per "resettare gli indici"? e in che modo farlo?

Mille Grazie

lbenaglia Profilo | Guru

>ho da poco cominciato lo studio di sql server 2005 express.
>Ho creato una tabella con campi e ho settato la chiave primaria
>con tipo di dato int, ho settato la colonna come identità e con
>incremento identità di 1!
>Nel momento però in cui vado fisicamente a scrivere i dati all'interno
>della tabella la numerazione risulta per i fatti suoi.
>In particolare mi si sono creati i seguenti indici:
>2, 4, 6, 7, 9, 10, 13.
>Per quale motivo??????

Ciao Marco,

un indice è una struttura dati (b-tree) che permette di velocizzare gli accessi. Punto.
Quei valori che riporti sono autogenerati da SQL Server dato che nella definizione della colonna hai specificato la prorprietà IDENTITY.
In questo modo non devi preoccuparti di valorizzare esplicitamente tale colonna ad ogni INSERT.

>Come si fa per avere i dati incrementati di 1 ogni volta?
Probabilmente hai definito 2 come fattore di incremento.
La proprietà IDENTITY accetta 2 parametri: un seme che definisce il valore di partenza ed un fattore di incremento che determina appunto l'incremento ad ogni INSERT.
Quindi per avere 1 come fattore di incremento devi eliminare la colonna e crearne una nuova impostando a 1 il fattore di incremento.

>in più c'è un modo per "resettare gli indici"? e in che modo
>farlo?
Attenzione GLI INDICI SONO UN'ALTRA COSA!
Per resettare il valore della colonna IDENTITY puoi svuotare la tabella con il comando TRUNCATE TABLE.
Se invece vuoi impostare un nuovo seme utilizza il comando DBCC CHECKIDENT.

Sui Books Online troverai tutti i dettagli.

>Mille Grazie
Prego.

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

86Marco Profilo | Expert

ah ok perfetto...
infine un ultima domanda... ho creato una piccola applicazione per la gestione di fatturazione con microsoft access e il numero di fattura me lo facevo stampare da un contatore numerico.
Ora per fare la stessa cosa con sql server tu come lo faresti?
Grazie mille... credo cmq di aver capito quello da te scritto sopra.
Ancora grazie

lbenaglia Profilo | Guru

>infine un ultima domanda... ho creato una piccola applicazione
>per la gestione di fatturazione con microsoft access e il numero
>di fattura me lo facevo stampare da un contatore numerico.
>Ora per fare la stessa cosa con sql server tu come lo faresti?
Boh, io lo genererei alla fine della transazione di INSERT.

>Grazie mille... credo cmq di aver capito quello da te scritto
>sopra.
Meno male

>Ancora grazie
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

86Marco Profilo | Expert

>Boh, io lo genererei alla fine della transazione di INSERT.
Si, ma come lo genereresti?

lbenaglia Profilo | Guru

>>Boh, io lo genererei alla fine della transazione di INSERT.
>Si, ma come lo genereresti?

Ah boh, non ho in mano la tua analisi
Non mi occupo di fatturazione, quindi non ne ho idea
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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