Campo ID E autoincrement (Errore)

sabato 23 febbraio 2008 - 18.36

Anonimo Profilo | Senior Member

Ciao,
Sto provando ad usare SQL 2005 Express per la prima volta.

Mi sapete dire perchè mi viene quel messaggio di errore?.

ed pure ho messo campo ID: int ed auto_increment


1024x768 73Kb


grazie.

Mi spiegate come fare ad non venire quell'errore?.

ciao e grazie.

lbenaglia Profilo | Guru

>Sto provando ad usare SQL 2005 Express per la prima volta.
>
>Mi sapete dire perchè mi viene quel messaggio di errore?.
>
>ed pure ho messo campo ID: int ed auto_increment

Ciao Luigi,

Immagino che con "auto_increment" tu intenda che hai definito la colonna ID come intero specificando la proprietà IDENTITY.
L'errore indica che la colonna ID è stata definita NOT NULL (quindi occorre necessariamente specificare un valore) ma per qualche motivo non è stata valorizzata in fase di INSERT (suppongo che hai commesso qualche errore con la proprietà IDENTITY).
Ora, se hai effettivamente specificato la proprietà IDENTITY, ogni operazione di INSERT genererà automaticamente un valore in base al seme ed al fattore di incremento specificati nella definizione della colonna.

Facciamo un esempio:

USE tempdb; CREATE TABLE dbo.Students( StudentID int NOT NULL IDENTITY(1, 1) PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Andrea', 'Montanari'); SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 1 Lorenzo Benaglia 2 Luca Bianchi 3 Andrea Montanari (3 row(s) affected) */ DROP TABLE dbo.Students; CREATE TABLE dbo.Students( StudentID int NOT NULL IDENTITY(2, 5) PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Andrea', 'Montanari'); SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 2 Lorenzo Benaglia 7 Luca Bianchi 12 Andrea Montanari (3 row(s) affected) */ DROP TABLE dbo.Students;

Nel primo caso ho definito la colonna StudentID come intero che non accetta il valore NULL (quindi di fatto ho reso obbligatorio un valore) e ho specificato un seme ed un fattore di incremento uguali a 1.
Come puoi norare i comandi di INSERT non specificano un valore esplicito per la colonna StudentID dato che verrà automaticamente valorizzata in base al seme ed al fattore di incremento.
La prima riga avrà StudentID pari al seme (1) mentre le successive verranno incrementate di un valore pari al fattore di incremento (1).
Nel secondo caso il seme è uguale a 2 ed il fattore di incremento vale 5.

Per ulteriori dettagli fai riferimento al seguente paragrafo dei Books Online:

"IDENTITY (Property) (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms186775.aspx

>ciao e grazie.
Prego.

Ciao!
--
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5