2012-04-04 36 views
46

estoy usando la siguiente consulta:¿Por qué SQL Server arroja este error: no se puede insertar el valor NULL en la columna 'id'?

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

Sin embargo, no estoy especificando la clave principal (que es id). Así que mi pregunta es, ¿por qué es el servidor SQL regresando con este error:

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. 

Respuesta

81

Estoy asumiendo que id se supone que es un valor incremental.

Debe configurar esto, o si tiene una columna que no admite nulos, sin valor predeterminado, si no proporciona ningún valor, generará un error.

Para configurar incremento automático en SQL Server Management Studio:

  • Abra la tabla en Design
  • Seleccione su columna y pase a Column Properties
  • Bajo Indentity Specification, establecer (Is Identity)=Yes y Indentity Increment=1
+0

pero tengo 2 columna llamada ID y id_student .. I mismo por encima de error .. i puedo conjunto de identidad único column..if i puesto para medios de identificación , error para id_student o si configuro para id_student significa que tengo error para id. – pcs

+0

Al intentar guardar estas modificaciones, Management Studio dice "Guardar cambios no está permitido. Los cambios que ha realizado requieren que se eliminen y vuelvan a crear las siguientes tablas. Ha realizado cambios en una tabla que no se puede volver a crear. creó o habilitó la opción Evitar guardar cambios que requieren que la tabla se vuelva a crear ". – Henno

+2

Aunque no habilité esta opción, resultó estar en ON. Lo desactivé (en Herramientas> Opciones> Diseñadores) y pude guardar los cambios. – Henno

0

O bien debe especificar una ID en la inserción, o debe configurar la columna id en th La base de datos debe tener Especificación de identidad = Sí.

0

Como id es PK, DEBE ser único y no nulo. Si no menciona ningún campo en la lista de campos para insertar, se supondrá que es un valor nulo o predeterminado. Establezca la identidad (es decir, autoincrement) para este campo si no desea configurarlo manualmente todo el tiempo.

5

Si la columna de la id tiene ningún valor predeterminado, pero tiene NOT NULL restricción, entonces usted tiene que proporcionar un valor a sí mismo

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

Es necesario establecer la propiedad incremento automático de la columna ID de verdad cuando se crea la tabla o puedes modificar tu tabla existente para hacer esto.

-3

Puede insertar manualmente un valor en la columna ID (aquí llamo "PK"):

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

¿Puedes agregar una explicación sobre cómo funcionará esto? – Robert

0

@curt es correcta, pero me he dado cuenta de que a veces incluso esto no funciona con NULL anulado errores y parece ser intermitente Evité el error en todo momento, también estableciendo Indenty Seed en 1 y IDENTITY(1, 1) NOT FOR REPLICATION.

0

no dio ningún valor para la identificación. Pruebe esto:

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

O puede establecer el incremento automático en el campo de identificación, si necesita el valor de identificación automáticamente.

1

uso IDENTITY(1,1) mientras que la creación de la tabla por ejemplo

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

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