85 votes

Pourquoi le serveur SQL renvoie-t-il cette erreur : Impossible d'insérer la valeur NULL dans la colonne « id » ?

J'utilise la requête suivante :

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

Cependant, je ne spécifie pas la clé primaire (qui est id ). Ma question est donc la suivante : pourquoi le serveur SQL revient-il avec cette erreur :

 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.

153voto

Curt Points 42871

Je suppose que id est censé être une valeur incrémentielle.

Vous devez définir ceci, sinon si vous avez une colonne non nullable, sans valeur par défaut, si vous ne fournissez aucune valeur, une erreur se produira.

Pour configurer l'incrémentation automatique dans SQL Server Management Studio :

  • Ouvrez votre table en Design
  • Sélectionnez votre colonne et allez à Column Properties
  • Sous Indentity Specification , définissez (Is Identity)=Yes et Indentity Increment=1

8voto

Minakshi Korad Points 71

utiliser IDENTITY(1,1) lors de la création de la table par exemple

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

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

4voto

Andy Irving Points 1125

Si la id n'a pas de valeur par défaut, mais a une NOT NULL , alors vous devez fournir une valeur vous-même

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

1voto

robotik Points 11

si vous ne pouvez pas ou ne voulez pas définir la propriété d'auto-incrémentation de l'identifiant, vous pouvez définir la valeur de l'identifiant pour chaque ligne, comme ceci :

 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)

0voto

natadecoco Points 50

vous n'avez pas donné de valeur pour id. Essaye ça :

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

Ou vous pouvez définir l'incrémentation automatique sur le champ id, si vous avez besoin que la valeur id soit ajoutée automatiquement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X