Warum löst SQL Server diesen Fehler aus: Der Wert NULL kann nicht in die Spalte 'id' eingefügt werden.

78

Ich verwende die folgende Abfrage:

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

Ich gebe jedoch nicht den Primärschlüssel an (der ist id). Meine Frage ist also, warum SQL Server mit diesem Fehler zurückkommt:

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.
Webnet
quelle

Antworten:

145

Ich gehe davon aus, dass iddies ein inkrementeller Wert sein soll.

Sie müssen dies festlegen, oder wenn Sie eine nicht nullfähige Spalte ohne Standardwert haben, wird ein Fehler angezeigt, wenn Sie keinen Wert angeben.

So richten Sie die automatische Inkrementierung in SQL Server Management Studio ein:

  • Öffnen Sie Ihren Tisch in Design
  • Wählen Sie Ihre Spalte aus und gehen Sie zu Column Properties
  • Unter Indentity Specification, setzen (Is Identity)=YesundIndentity Increment=1
Curt
quelle
aber ich habe 2 Spalten mit dem Namen id und id_student. Ich habe den gleichen Fehler wie oben. Ich kann nur eine Spalte für die Identität festlegen.
Stück
Beim Versuch, diese Änderungen zu speichern, sagt Management Studio: "Das Speichern von Änderungen ist nicht zulässig. Für die von Ihnen vorgenommenen Änderungen müssen die folgenden Tabellen gelöscht und neu erstellt werden. Sie haben entweder Änderungen an einer Tabelle vorgenommen, die nicht neu erstellt werden kann oder aktiviert die Option Speichern von Änderungen verhindern, bei denen die Tabelle neu erstellt werden muss. "
Henno
9
Obwohl ich diese Option nicht aktiviert habe, stellte sich heraus, dass sie eingeschaltet war. Ich habe es deaktiviert (unter Extras> Optionen> Designer) und konnte die Änderungen speichern.
Henno
7

Verwenden Sie IDENTITY(1,1)beim Erstellen der Tabelle z

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

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)
)
Minakshi Korad
quelle
4

Wenn die idSpalte keinen Standardwert hat, aber eine NOT NULLEinschränkung aufweist, müssen Sie selbst einen Wert angeben

INSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE())
Andy Irving
quelle
1

Wenn Sie die Autoincrement-Eigenschaft der ID nicht festlegen können oder möchten, können Sie den Wert für die ID für jede Zeile wie folgt festlegen:

INSERT INTO role (id, name, created)
SELECT 
      (select max(id) from role) + ROW_NUMBER() OVER (ORDER BY name)
    , name
    , created
FROM (
    VALUES 
      ('Content Coordinator', GETDATE())
    , ('Content Viewer', GETDATE())
) AS x(name, created)
Robotik
quelle
0

Sie müssen entweder eine ID in der Einfügung angeben oder die ID-Spalte in der Datenbank so konfigurieren, dass Identitätsspezifikation = Ja lautet.

JupiterP5
quelle
0

Da id PK ist, MUSS es eindeutig und nicht null sein. Wenn Sie in der Feldliste kein Feld zum Einfügen erwähnen, sollte es null oder ein Standardwert sein. Legen Sie die Identität (dh die automatische Inkrementierung) für dieses Feld fest, wenn Sie es nicht jedes Mal manuell festlegen möchten.

quzary
quelle
0

Sie müssen die Autoincrement-Eigenschaft der ID-Spalte beim Erstellen der Tabelle auf true setzen, oder Sie können dazu Ihre vorhandene Tabelle ändern.

Steigender Drache
quelle
0

Sie haben keinen Wert für id angegeben. Versuche dies :

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

Sie können auch das automatische Inkrement für das ID-Feld festlegen, wenn der ID-Wert automatisch hinzugefügt werden soll.

Nata de coco
quelle
0

Ich hatte ein ähnliches Problem und als ich es mir ansah, fehlte id( idwar empty/null) einfach ein Feld in der tatsächlichen Tabelle - was bedeutet, wenn Sie versuchen, das idFeld primary keyso zu gestalten, dass es zu einem Fehler führt, da die Tabelle eine Zeile mit dem nullWert für enthält primary key.

Dies könnte die Lösung sein, wenn Sie eine temporäre Tabelle sehen, die dem Fehler zugeordnet ist. Ich habe SQL Server Management Studio verwendet.

vid.dev
quelle
-1

@curt ist korrekt, aber ich habe festgestellt, dass manchmal sogar dies mit NULL unzulässigen Fehlern fehlschlägt und es zeitweise zu sein scheint. Ich habe den Fehler jederzeit vermieden, indem ich auch den Indenty Seed auf 1 und gesetzt habe IDENTITY(1, 1) NOT FOR REPLICATION.

Fandango68
quelle
-1

In meinem Fall,

Ich habe versucht, mein Modell zu aktualisieren, indem ein Fremdschlüssel erforderlich gemacht wurde, aber die Datenbank enthielt bereits in einigen Spalten "Null" -Daten aus zuvor eingegebenen Daten. Also jedes Mal, wenn ich die Update-Datenbank starte ... habe ich den Fehler bekommen.

Ich habe es gelöst, indem ich alle Zeilen, die null in der Spalte hatten, die ich erforderlich machte, manuell aus der Datenbank gelöscht habe.

JPTugirimana
quelle
-1

Wenn Sie entityframework verwenden. Öffnen Sie die Migration, setzen Sie den Wert auf nullable: true und aktualisieren Sie die Datenbank

Geben Sie hier die Bildbeschreibung ein

chamskra66er
quelle
1
Bitte posten Sie keine Codebilder
borchvm
1
Willkommen bei Stack Overflow! Bitte beachten Sie, dass Sie eine sehr alte und bereits beantwortete Frage beantworten. Hier ist eine Anleitung zur Beantwortung .
help-info.de
-4

Sie können einen Wert manuell in die ID-Spalte einfügen (hier nenne ich ihn "PK"):

insert into table1 (PK, var1, var2)
values ((select max(PK)+1 from table1), 123, 456)
Lømmis
quelle