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.
sql
sql-server
Webnet
quelle
quelle
Verwenden Sie
IDENTITY(1,1)
beim Erstellen der Tabelle zCREATE TABLE SAMPLE( [Id] [int] IDENTITY(1,1) NOT NULL, [Status] [smallint] NOT NULL, CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED ( [Id] ASC ) )
quelle
Wenn die
id
Spalte keinen Standardwert hat, aber eineNOT NULL
Einschränkung aufweist, müssen Sie selbst einen Wert angebenINSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE())
quelle
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)
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Ich hatte ein ähnliches Problem und als ich es mir ansah, fehlte
id
(id
warempty/null
) einfach ein Feld in der tatsächlichen Tabelle - was bedeutet, wenn Sie versuchen, dasid
Feldprimary key
so zu gestalten, dass es zu einem Fehler führt, da die Tabelle eine Zeile mit demnull
Wert für enthältprimary key
.quelle
@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
.quelle
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.
quelle
Wenn Sie entityframework verwenden. Öffnen Sie die Migration, setzen Sie den Wert auf nullable: true und aktualisieren Sie die Datenbank
quelle
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)
quelle