2012-04-04 14 views
46

Używam następujące zapytanie:Dlaczego serwer SQL rzuca ten błąd: Nie można wstawić wartości NULL do kolumny "id"?

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

Jednak ja nie podając klucz podstawowy (co jest id). Więc moje pytanie jest, dlaczego jest serwer SQL wraca z tego błędu:

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. 

Odpowiedz

81

Jestem zakładając, że id ma być wartość przyrostu.

Musisz to ustawić, lub jeśli masz kolumnę nie podlegającą zerowaniu, bez wartości domyślnej, jeśli nie podasz żadnej wartości, wystąpi błąd.

Aby ustawić automatycznego przyrostu w SQL Server Management Studio:

  • Otwórz tabelę w Design
  • Wybierz kolumny i przejdź do Column Properties
  • Pod Indentity Specification ustaw (Is Identity)=Yes i Indentity Increment=1
+0

ale ma dwie kolumny o nazwie id i id_student .. I sam błąd powyżej .. można ustawić tylko jeden column..if tożsamości i ustawienie za pomocą id , błąd dla id_student lub jeśli ustawiłem id_student oznacza, że ​​mam błąd dla id. – pcs

+0

Podczas próby zapisania tych modyfikacji, Management Studio mówi "Zapisywanie zmian jest niedozwolone. Wprowadzone zmiany wymagają usunięcia i ponownego utworzenia następujących tabel. Wprowadzono zmiany w tabeli, której nie można przywrócić. utworzyło lub aktywowało opcję Zapobieganie zapisywaniu zmian, które wymagają ponownego utworzenia tabeli. " – Henno

+2

Mimo że nie włączałem tej opcji, okazało się, że jest ON. Usunąłem zaznaczenie (w menu Narzędzia> Opcje> Projektanci) i udało się zapisać zmiany. – Henno

0

Należy podać identyfikator we wkładce lub skonfigurować kolumnę identyfikatora w e baza danych, aby mieć Specyfikację tożsamości = Tak.

0

Ponieważ id to PK, MUSI być unikalny i nie może być pusty. Jeśli nie wspomnisz żadnego pola na liście pól do wstawienia, będzie to wartość pusta lub domyślna. Ustaw tożsamość (to jest autoinkrementacja) dla tego pola, jeśli nie chcesz ustawiać go ręcznie za każdym razem.

5

Jeśli kolumna id ma wartość domyślną, ale ma NOT NULL ograniczenie, to trzeba podać wartość samemu

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

Musisz ustawić autoIncrement właściwość id kolumnie prawda podczas tworzenia tabeli lub możesz zmienić istniejącą tabelę, aby to zrobić.

-3

można wstawiać ręcznie wartość w kolumnie ID (tutaj ja to nazywam „PK”):

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

Czy możesz również dodać wyjaśnienie, jak to zadziała? – Robert

0

@curt jest poprawna, ale zauważyłem, że czasami nawet to nie z NULL zabronione błędy i wydaje się być przerywany. Unikałem błędu przez cały czas, ustawiając także Indenty Seed na 1 i IDENTITY(1, 1) NOT FOR REPLICATION.

0

Nie podałeś wartości id. Wypróbuj to:

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

Lub możesz ustawić automatyczne zwiększanie na polu identyfikatora, jeśli potrzebujesz wartości dodanej automatycznie.

1

zastosowanie IDENTITY(1,1) podczas tworzenia tabeli np

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

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
) 
) 
Powiązane problemy