2012-04-04 12 views
46

Sto utilizzando la seguente query:Perché il server SQL ha generato questo errore: Impossibile inserire il valore NULL nella colonna "id"?

INSERT INTO role (name, created) VALUES ('Content Coordinator', GETDATE()), ('Content Viewer', GETDATE()) 

Tuttavia, non sto specificando la chiave primaria (che è id). Quindi le mie domande sono, perché è il server SQL tornando con questo errore:

Msg 515, Level 16, State 2, Line 1 
Cannot insert the value NULL into column 'id', table 'CMT_DEV.dbo.role'; column does not allow nulls. INSERT fails. 
The statement has been terminated. 

risposta

81

sto supponendo che id si suppone essere un valore di incremento.

È necessario impostarlo, oppure se si dispone di una colonna non annullabile, senza valore predefinito, se non si fornisce alcun valore si verificherà un errore.

Per impostare incremento automatico in SQL Server Management Studio:

  • aprire la tabella in Design
  • Selezionare la colonna e andare a Column Properties
  • Sotto Indentity Specification, impostare (Is Identity)=Yes e Indentity Increment=1
+0

ma ho 2 colonna denominata id e id_student .. io stesso errore sopra .. posso impostare identità unico column..if ho impostato per mezzo id , errore per id_student o se ho impostato per id_student significa ottenuto errore per id. – pcs

+0

Quando si tenta di salvare queste modifiche, Management Studio dice "Il salvataggio delle modifiche non è consentito Le modifiche apportate richiedono che le seguenti tabelle vengano eliminate e ricreate. Sono state apportate modifiche a una tabella che non può essere restituita creata o abilitata l'opzione Impedisci il salvataggio delle modifiche che richiedono la creazione della tabella. " – Henno

+2

Anche se non ho abilitato questa opzione, è risultato essere ON. L'ho deselezionato (in Strumenti> Opzioni> Designer) ed è stato in grado di salvare le modifiche. – Henno

0

È necessario specificare un ID nell'inserto oppure è necessario configurare la colonna id in th Il database deve avere Identity Specification = Yes.

0

Poiché id è PK, DEVE essere univoco e non nullo. Se non si specifica alcun campo nell'elenco dei campi per l'inserimento, si suppone che sia un valore nullo o predefinito. Imposta identità (ad esempio autoincremento) per questo campo se non si desidera impostarlo manualmente ogni volta.

5

Se la colonna id non ha alcun valore di default, ma ha NOT NULL vincolo, poi si deve fornire un valore da soli

INSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE()) 
0

È necessario impostare la proprietà auto-incremento della colonna id true quando si crea la tabella o puoi modificare la tabella esistente per farlo.

-3

È possibile inserire manualmente un valore nella colonna ID (qui io lo chiamo "PK"):

insert into table1 (PK, var1, var2) 
values ((select max(PK)+1 from table1), 123, 456) 
+0

Puoi anche aggiungere una spiegazione su come funzionerà? – Robert

0

@curt è corretto, ma ho notato che a volte anche questo fallisce con NULL annullato errori e sembra essere intermittente. Ho evitato l'errore in ogni momento, impostando anche Indenty Seed su 1 e IDENTITY(1, 1) NOT FOR REPLICATION.

0

non hai dato un valore per id. Prova questo:

INSERT INTO role (id, name, created) VALUES ('example1','Content Coordinator', GETDATE()), ('example2', 'Content Viewer', GETDATE()) 

Oppure si può impostare l'incremento automatico sul campo id, se è necessario il valore id aggiunto automaticamente.

1

uso IDENTITY(1,1) durante la creazione della tabella es

CREATE TABLE SAMPLE(
[Id]  [int] IDENTITY(1,1) NOT NULL, 
[Status] [smallint] NOT NULL, 

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
) 
) 
Problemi correlati