SQL Server에서이 오류가 발생하는 이유 : 'id'열에 NULL 값을 삽입 할 수 없습니다.


80

다음 쿼리를 사용하고 있습니다.

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

그러나 기본 키 ()를 지정하지 않습니다 id. 그래서 내 질문은 왜 SQL Server 가이 오류로 돌아 오는 것입니까?

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.

답변:


148

나는 그것이 id증가하는 값 이라고 가정하고 있습니다.

이를 설정해야합니다. 그렇지 않으면 기본값이없는 널 불가능한 열이있는 경우 값을 제공하지 않으면 오류가 발생합니다.

SQL Server Management Studio에서 자동 증가를 설정하려면 :

  • 테이블 열기 Design
  • 열을 선택하고 Column Properties
  • 에서 Indentity Specification설정 (Is Identity)=YesIndentity Increment=1

하지만 id와 id_student라는 2 개의 열이 있습니다. 위의 오류와 동일합니다. .. id를 의미하는 경우, id_student에 대한 오류 또는 id_student에 대해 설정된 경우 id에 대한 오류가 있음을 의미하는 경우 하나의 열만 ID를 설정할 수 있습니다.
PC

이러한 수정 사항을 저장하려고 할 때 Management Studio는 "변경 사항을 저장할 수 없습니다. 변경 사항을 적용하려면 다음 테이블을 삭제하고 다시 생성해야합니다. 테이블을 다시 생성 할 수없는 변경 사항을 적용했습니다. 또는 테이블을 다시 생성해야하는 변경 사항 저장 방지 옵션을 활성화했습니다. "
Henno

9
이 옵션을 활성화하지 않았음에도 불구하고 ON으로 확인되었습니다. 도구> 옵션> 디자이너에서 선택을 취소하고 변경 사항을 저장할 수있었습니다.
Henno

7

IDENTITY(1,1)예를 들어 테이블을 만드는 동안 사용

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

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

4

경우 id열이 기본값이 없지만,이 NOT NULL제약 조건을, 당신은 가치를 직접 제공해야

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

1

id의 autoincrement 속성을 설정할 수 없거나 설정하지 않으려면 다음과 같이 각 행의 id 값을 설정할 수 있습니다.

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)

0

삽입에 ID를 지정하거나 ID 사양 = Yes를 갖도록 데이터베이스의 id 열을 구성해야합니다.


0

id는 PK이므로 고유해야하며 null이 아니어야합니다. 삽입을 위해 필드 목록에서 필드를 언급하지 않으면 null 또는 기본값으로 간주됩니다. 매번 수동으로 설정하지 않으려면이 필드에 대한 ID (예 : 자동 증가)를 설정하십시오.


0

테이블을 생성 할 때 id 열의 autoincrement 속성을 true로 설정하거나 기존 테이블을 변경하여이를 수행 할 수 있습니다.


0

당신은 이드에게 가치를주지 않았습니다. 이 시도 :

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

또는 id 값이 자동으로 추가되어야하는 경우 id 필드에서 자동 증가를 설정할 수 있습니다.


0

비슷한 문제가 있었고 그것을 살펴보면 실제 테이블의 필드가 누락되었습니다 id( idwas empty/null). 즉, id필드 를 만들려고 할 때 primary key테이블 nullprimary key.

오류와 관련된 임시 테이블이 표시되는 경우이 문제를 해결할 수 있습니다. SQL Server Management Studio를 사용하고있었습니다.


-1

@curt가 정확하지만 때때로 이것이 NULL 허용되지 않는 오류로 실패하고 간헐적으로 보이는 것을 발견했습니다. Indenty Seed를 1 및으로 설정하여 항상 오류를 피했습니다 IDENTITY(1, 1) NOT FOR REPLICATION.


-1

나의 경우에는,

외래 키를 필요로하여 모델을 업데이트하려고했지만 데이터베이스에는 이전에 입력 한 데이터의 일부 열에 이미 "null"데이터가 있습니다. 그래서 업데이트 데이터베이스를 실행할 때마다 오류가 발생했습니다.

내가 필요로하는 열에 null이있는 모든 행을 데이터베이스에서 수동으로 삭제하여 해결했습니다.


-1

entityframework를 사용하는 경우. 마이그레이션 열기, nullable 값 설정 : true 및 데이터베이스 업데이트

여기에 이미지 설명 입력


1
블록 코드 형식으로 질문에 코드를 복사 코드의하지 포스트 이미지를주세요 : stackoverflow.com/help/how-to-ask
borchvm

1
Stack Overflow에 오신 것을 환영합니다! 매우 오래되고 이미 답변 된 질문에 답변하고 있습니다. 다음은 응답 방법에 대한 가이드입니다 .
help-info.de

-4

ID 열에 수동으로 값을 삽입 할 수 있습니다 (여기서는 "PK"라고 함).

insert into table1 (PK, var1, var2)
values ((select max(PK)+1 from table1), 123, 456)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.