2012-04-04 4 views
46

Ich verwende die folgende Abfrage:Warum wirft SQL Server diesen Fehler: Kann den Wert NULL nicht in Spalte "ID" einfügen?

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

Allerdings bin ich den Primärschlüssel nicht spezifiziert (die id ist). Also meine Fragen ist, warum SQL Server kommt zurück mit diesem Fehler:

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. 

Antwort

81

Ich gehe davon aus, dass id soll ein Inkrementieren Wert.

Sie müssen dies festlegen. Wenn Sie eine Spalte ohne Nullwert haben und keinen Standardwert haben, wird ein Fehler angezeigt, wenn Sie keinen Wert angeben.

Um Autoinkrement in SQL Server Management Studio einrichten:

  • Tisch
  • Wählen Sie Ihre Spalte in Design Öffnen und
  • Unter Indentity Specification-Column Properties gehen, setzen (Is Identity)=Yes und Indentity Increment=1
+0

aber ich habe 2 Spalte namens id und id_student .. ich oben Fehler gleiche .. Ich kann i Identität nur eine column..if gesetzt für id Mittel eingestellt , Fehler für id_student oder wenn ich für id_student setze bedeutet Fehler für id. – pcs

+0

Wenn Sie versuchen, diese Änderungen zu speichern, sagt Management Studio: "Speichern von Änderungen ist nicht zulässig. Die von Ihnen vorgenommenen Änderungen erfordern das Löschen und Neuschreiben der folgenden Tabellen. Sie haben entweder Änderungen an einer Tabelle vorgenommen, die nicht geändert werden kann." erstellt oder aktiviert die Option Speichern von Änderungen verhindern, die eine Neuanlage der Tabelle erfordern. " – Henno

+2

Obwohl ich diese Option nicht aktiviert habe, war sie doch ON. Ich habe es deaktiviert (unter Extras> Optionen> Designer) und konnte die Änderungen speichern. – Henno

0

Sie müssen entweder eine ID in der Einfügung angeben, oder Sie müssen die ID-Spalte in th konfigurieren Die Datenbank soll Identity Specification = Yes haben.

0

Da ID ist PK muss es eindeutig und nicht null sein. Wenn Sie kein Feld in der Feldliste zum Einfügen angeben, wird angenommen, dass es Null oder Standardwert ist. Legen Sie die Identität (d. H. Autoinkrement) für dieses Feld fest, wenn Sie es nicht jedes Mal manuell festlegen möchten.

5

Wenn die id Spalte keinen Standardwert hat, hat aber NOT NULL Zwang, dann müssen Sie einen Wert bieten sich

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

Sie benötigen autoincrement Eigenschaft id-Spalte auf true gesetzt, wenn Sie die Tabelle erstellen oder Sie können Ihre vorhandene Tabelle ändern, um dies zu tun.

-3

Sie manuell einen Wert in der Spalte ID eingeben (hier ich es „PK“ nennen):

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

Können Sie auch eine Erklärung hinzufügen, wie dies funktioniert? – Robert

0

@curt korrekt ist, aber ich habe bemerkt, dass manchmal sogar diese mit NULL Fehler nicht zulässig ausfällt und es scheint intermittierend zu sein. Ich habe den Fehler zu jeder Zeit vermieden, indem ich auch den Indenty Seed auf 1 und IDENTITY(1, 1) NOT FOR REPLICATION gesetzt habe.

0

Sie haben keinen Wert für die ID angegeben. Versuchen Sie folgendes:

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

Oder Sie die Autoinkrement auf id-Feld gesetzt, wenn Sie die ID-Wert müssen automatisch hinzugefügt.

1

Verwendung IDENTITY(1,1) während der Erstellung der Tabelle zB

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

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
) 
) 
Verwandte Themen