[sql] IDENTITY_INSERT가 OFF로 설정된 경우 ‘table’테이블에서 ID 열에 명시 적 값을 삽입 할 수 없습니다.

다음 스크립트를 실행할 때 아래와 같은 오류가 발생합니다. 오류는 무엇이며 어떻게 해결할 수 있습니까?

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

오류:

서버 : 메시지 544, 수준 16, 상태 1, 줄 1

IDENTITY_INSERT가 OFF로 설정된 경우 ‘table’테이블에서 ID 열에 명시 적 값을 삽입 할 수 없습니다.



답변

OperationId그 값을 ID 열에 삽입하고 있습니다 .

이와 같이 테이블에서 ID 삽입을 켜서 고유 한 ID 값을 지정할 수 있습니다.

SET IDENTITY_INSERT Table1 ON

INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
            (OperationID,
             OpDescription,
             FilterID)
VALUES      (20,
             'Hierachy Update',
             1)

SET IDENTITY_INSERT Table1 OFF 


답변

자동으로 생성되므로 OperationID에 값을 넣지 마십시오. 이 시도:

Insert table(OpDescription,FilterID) values ('Hierachy Update',1)


답변

SQL 서버 에서이 오류가 발생하면이 쿼리를 실행하십시오.

SET IDENTITY_INSERT tableName ON

이것은 하나의 databse 테이블 만 작동합니다.
예를 들어 테이블 이름이 학생 인 경우 쿼리는 다음과 같습니다 SET IDENTITY_INSERT student ON

웹 애플리케이션에서이 오류가 발생하거나 엔티티 프레임 워크를 사용하는 경우 먼저 SQL Server에서이 쿼리를 실행하고 엔티티 모델을.edmx file 업데이트하고 ( ) 프로젝트를 빌드 하면이 오류가 해결됩니다.


답변

IDENTITY_INSERT를 ON으로 설정하는 것에 매우주의하십시오. 데이터베이스가 유지 보수 모드에 있고 단일 사용자로 설정되어 있지 않으면 이는 좋지 않은 방법입니다. 이것은 인서트뿐만 아니라 테이블에 액세스하려는 다른 사람들에게도 영향을 미칩니다.

ID 필드에 값을 입력하려고하는 이유는 무엇입니까?


답변

기본적으로 오류없이 레코드를 삽입하는 방법에는 두 가지가 있습니다.

1) IDENTITY_INSERT가 OFF로 설정된 경우. 기본 키 “ID”는 없어야합니다.

2) IDENTITY_INSERT가 ON으로 설정된 경우. 기본 키 “ID”가 있어야합니다.

IDENT PRIMARY KEY로 만든 동일한 테이블에서 다음 예제에 따라 :

CREATE TABLE [dbo].[Persons] (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    LastName VARCHAR(40) NOT NULL,
    FirstName VARCHAR(40)
);

1) 첫 번째 예에서는 IDENTITY_INSERT가 OFF 일 때 오류없이 테이블에 새 레코드를 삽입 할 수 있습니다. 기본 키 “ID” 는 “INSERT INTO”문에 없어야 하며 고유 ID 값이 자동으로 추가됩니다 .. 이 경우 INSERT에서 ID가 있으면 “테이블의 식별 열에 명시적인 값을 삽입 할 수 없습니다 …”라는 오류가 발생합니다.

SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');

표 [dbo]의 출력. [사람]은 다음과 같습니다.

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE

2) 두 번째 예에서는 IDENTITY_INSERT가 ON 일 때 오류없이 테이블에 새 레코드를 삽입 할 수 있습니다. 기본 키ID 값이 존재하지 않는 “ID” 는 “INSERT INTO”문에 있어야 합니다 .이 경우 ID가 INSERT에 없으면 “명시적인 값은 다음과 같아야합니다. 식별 컬럼 테이블에 지정되었습니다 … “

SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK'); 

표 [dbo]의 출력. [사람]은 다음과 같습니다.

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE
3     BLACK      JACK
5     WHITE      JOHN


답변

해당 테이블의 엔티티에서 DatabaseGenerated ID 삽입이 설정된 열 위에 속성을 .

예:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }


답변

예를 들어 테이블 이름이 School 인 경우이 명령문을 간단히 사용할 수 있습니다 . 삽입하기 전에 identity_insert가 ON 으로 설정 되고 쿼리 삽입 후 identity_insert를 끄십시오.

SET IDENTITY_INSERT School ON
/*
  insert query
  enter code here
*/
SET IDENTITY_INSERT School OFF