Nice programing

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

nicepro 2020. 11. 17. 21:06
반응형

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


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

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.

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

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

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

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

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

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

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
)
)

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

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

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


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)

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


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


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


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


나의 경우에는,

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

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


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

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

참고 URL : https://stackoverflow.com/questions/10013313/why-is-sql-server-throwing-this-error-cannot-insert-the-value-null-into-column

반응형