복붙노트

[SQL] SQL 서버, 할 수없는 기본 키 필드에 널 (null)입니까?

SQL

SQL 서버, 할 수없는 기본 키 필드에 널 (null)입니까?

나는이 일에 내 머리를 찢어 준비에 대해 해요. 나는 MS SQL에 비교적 새로운 해요, 그리고 유사한 포스트 어느 곳을 보지 못했다.

이 같은 진술을 할 때 :

INSERT INTO qcRawMatTestCharacteristic 
VALUES(NULL, 1,1,1,1,1,1,1,'','','', GETDATE(), 1)

나는 다음을 얻을 :

나는 오류를 이해하지만, 널 (null) 값은 int 데이터 유형 내 내 기본 필드입니다.

어떤 아이디어!?

해결법

  1. ==============================

    1.관계형 데이터베이스의 기본 키는 NULL이 될 수 없습니다 - 그것은 기본 키의 주요, 기본적인 특성 중 하나입니다.

    관계형 데이터베이스의 기본 키는 NULL이 될 수 없습니다 - 그것은 기본 키의 주요, 기본적인 특성 중 하나입니다.

    참조 : 디자인에 의해 SQL은 : 어떻게 기본 키를 선택하는

    업데이트 : 당신은 "자동 증가"SQL Server의 기본 키를 원하는 좋아, 그럼.

    당신은 당신의 CREATE TABLE 문에 INT IDENTITY로 정의해야합니다 :

     CREATE TABLE dbo.YourTable(ID INT IDENTITY, col1 INT, ..., colN INT)
    

    당신은 INSERT를 수행 할 때 다음, 당신은 명시 적으로 삽입 할 열을 지정하는 것이 아니라 그냥 목록에서 "ID"열을 지정하지 않을 필요 - 다음 SQL Server가 자동적으로 적절한 값을 찾아 처리합니다 :

     INSERT INTO dbo.YourTable(col1, col2, ..., colN) -- anything **except** `ID`      
     VALUES(va1l, val2, ..., valN)
    

    이미 테이블을 생성 한 후이 작업을 수행하려면 SQL Server 관리 Studio의 테이블 디자이너에서 수행 할 수 있습니다 :

  2. ==============================

    2.기본 키 필드는 MS SQL에서 널 (null) 값을 포함 할 수 없습니다. 당신은 SQL 테이블을 채우려하고 아이덴티티 필드로 PK를 설정 정수 기반의 기본 키 필드에 입력해야할지 잘 모릅니다합니다. 또한 삽입 문을 지정하는 경우의 예를 들어 삽입 한 Statment의 열 매핑 부분을 사용하는 것이 현명합니다 :

    기본 키 필드는 MS SQL에서 널 (null) 값을 포함 할 수 없습니다. 당신은 SQL 테이블을 채우려하고 아이덴티티 필드로 PK를 설정 정수 기반의 기본 키 필드에 입력해야할지 잘 모릅니다합니다. 또한 삽입 문을 지정하는 경우의 예를 들어 삽입 한 Statment의 열 매핑 부분을 사용하는 것이 현명합니다 :

    Insert into (field1, field2, field3)
    values
    (value1, value2, value3)
    

    그 이유는 열 순서 당신이 SQL 관리자가 열 순서를 수정할 수있는 용으로 개발 된 것입니다 것을 보장합니다. 그것은 또한 당신이 기본 키 예의 값을 지정에서 신원 기본 키를 가진 행을 함께 삽입 할 수 있습니다

    CREATE TABLE [dbo].[foo](
        [fooid] [int] IDENTITY(1,1) NOT NULL,
        [name] [varchar](50) NULL,
     CONSTRAINT [PK_foo] PRIMARY KEY
    (
            [fooid] ASC
    )
    

    지금 내 삽입 문은 간단하다

    Insert into foo (name)
    values
    ("John")
    

    테이블의 결과가 될 것이다

    1, "John"
    
  3. ==============================

    3.당신은 아마 당신의 정수 기본 키에 자동 증가 설정을 (추가하는 것을 잊었다)가 없습니다.

    당신은 아마 당신의 정수 기본 키에 자동 증가 설정을 (추가하는 것을 잊었다)가 없습니다.

  4. ==============================

    4.기본 키는 value.Why가 기본 키 필드에 널 (null) 값을 삽입하는 널 (null)을 받아 야해? 기본 키 필드가 고유 한 테이블에서 각 레코드를 만들 것입니다 nullable이 아닌, 고유 한 값을 가져야한다

    기본 키는 value.Why가 기본 키 필드에 널 (null) 값을 삽입하는 널 (null)을 받아 야해? 기본 키 필드가 고유 한 테이블에서 각 레코드를 만들 것입니다 nullable이 아닌, 고유 한 값을 가져야한다

  5. ==============================

    5.당신은 단지 1 고유 한 행에 null 대신 0을 사용할 수 있습니다, 널 (null)이 PK를 위해 할 수 없습니다. 또는 당신은 PK 사용 및 자동 increament PK 필드를 생략 할 수 있습니다

    당신은 단지 1 고유 한 행에 null 대신 0을 사용할 수 있습니다, 널 (null)이 PK를 위해 할 수 없습니다. 또는 당신은 PK 사용 및 자동 increament PK 필드를 생략 할 수 있습니다

  6. ==============================

    6.당신이 기본 키의 자동 증가 필드가 가정하면 당신은 당신의 삽입에 필드 목록을 포함하고, 예를 들어 해당 필드에 값을 넣지해야합니다

    당신이 기본 키의 자동 증가 필드가 가정하면 당신은 당신의 삽입에 필드 목록을 포함하고, 예를 들어 해당 필드에 값을 넣지해야합니다

    INSERT INTO qcRawMatTestCharacteristic 
    (Answer1,Answer2,...SomeDateField)
    VALUES(1,1,1,1,1,1,1,'','','', GETDATE(), 1)
    
  7. ==============================

    7.나는 당신의 진짜 문제는 당신이 PK가 자동으로 올바른 채워되도록 확인하는 방법 삽입 문을 작성하지 않은 것입니다 겠지? 당신은 당신이 그들 모두를 설정하려고하지만 너무 같은 PK 필드를 제외하고 보이는, 대한 필드 당신이있는 거 설정 값의 이름을 지정해야합니다

    나는 당신의 진짜 문제는 당신이 PK가 자동으로 올바른 채워되도록 확인하는 방법 삽입 문을 작성하지 않은 것입니다 겠지? 당신은 당신이 그들 모두를 설정하려고하지만 너무 같은 PK 필드를 제외하고 보이는, 대한 필드 당신이있는 거 설정 값의 이름을 지정해야합니다

    INSERT INTO someTable
    (fieldName1, fieldName2) 
    VALUES(1,1)
    

    어디 sometable 세 가지 필드가있는 테이블입니다. PK,하여 FieldName1 및 fieldName2. 당신은 또한 확실히 PK 필드에 ID 속성이 true로 설정되어 있는지 확인해야합니다.

  8. ==============================

    8.당신은 ID 열이있는 경우, 당신은 삽입 문을 지정할 필요가 없습니다.

    당신은 ID 열이있는 경우, 당신은 삽입 문을 지정할 필요가 없습니다.

    INSERT INTO qcRawMatTestCharacteristic  
    VALUES(1,1,1,1,1,1,1,'','','', GETDATE(), 1) 
    

    당신은 ID 열이 아닌 기본 키가있는 경우 그렇지 않으면 널을 삽입하려고합니다 기본적으로 기본 키가 아닌 널 (NULL) 때문에, 당신은 그것을 지정할 필요가 없습니다.

  9. from https://stackoverflow.com/questions/3876785/sql-server-cant-insert-null-into-primary-key-field by cc-by-sa and MIT license