ID가 설정된 열 삽입

페이지 업데이트 :
페이지 생성 날짜 :

SQL Server에는 레코드를 추가할 때 순차적 번호를 1에서 특정 열로 자동으로 설정하는 "IDENTITY" 속성이 있습니다. 예를 들어 A 열에 IDENTITY를 설정하고 3개의 레코드를 추가하면 A 열은 추가한 순서대로 1, 2 및 3 값으로 자동으로 채워집니다.

INSERT 문을 사용하더라도 값이 자동으로 설정되므로 값을 명시 적으로 설정할 필요는 없지만 외래 키 등에 사용되기 때문에 값을 명시 적으로 설정하려는 경우가 있다고 생각합니다.

예를 들어, 그림과 같이 "ID" 열에 "IDENTITY" 속성이 설정된 테이블이 있다고 가정합니다.

ID 열을 포함하여 이 테이블에 값을 삽입하는 INSERT 문은 다음과 같습니다.

insert into [テーブル名] ([ID], [Value]) values (1, 1)

그러나 실행하려고하면 다음과 같은 오류가 나타납니다.

메시지 544, 수준 16, 상태 1, 줄 1 IDENTITY_INSERT가 OFF로 설정되면 명시적 값을 테이블 'XXXXX'의 ID 컬럼에 삽입할 수 없습니다.

원래 IDENTITY로 설정된 열에는 값이 자동으로 설정되는 것으로 간주되므로 값을 명시적으로 설정할 수 없습니다.

실제로 설정하려면 오류 메시지에 설명 된대로 "IDENTITY_INSERT"을 "ON"으로 설정해야합니다. 삽입하기 전에 IDENTITY_INSERT 켜고 다음 SQL에서와 같이 삽입이 완료되면 다시 OFF로 설정합니다.

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

이제 값을 명시적으로 설정하고 삽입할 수 있습니다. 테이블을 사용하는 INSERT-SELECT도 유효합니다.

IDENTITY가 있는 열에는 1의 값이 자동으로 할당되지만 위에서 설명한 대로 값을 명시적으로 설정하면 다음에 어떤 번호가 할당될지 궁금할 수 있습니다. 이 경우 할당된 다음 값은 테이블에 추가된 가장 높은 값 이후의 숫자에서 지정되므로 새 레코드를 삽입할 때 중복 값이 없습니다. (단, 장애 등으로 인한 예외는 있습니다.)