다음을 통해 공유


SET IDENTITY_INSERT(Transact-SQL)

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse Analytics

명시적 값을 테이블의 ID 열에 삽입할 수 있도록 합니다.

Transact-SQL 구문 표기 규칙

구문

SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }

인수

database_name

지정한 테이블이 있는 데이터베이스의 이름입니다.

schema_name

테이블이 속한 스키마의 이름입니다.

table_name

ID 열이 있는 테이블의 이름입니다.

설명

언제든지 세션의 테이블 하나만 IDENTITY_INSERT 속성을 ON설정할 수 있습니다. 테이블에 이 속성이 이미 ON설정되어 있고 다른 테이블에 대해 SET IDENTITY_INSERT ON 문이 실행된 경우 SQL Server는 SET IDENTITY_INSERT 이미 ON상태라는 오류 메시지를 반환하고 ON 설정된 테이블을 보고합니다.

테이블의 현재 ID 값보다 큰 값을 삽입하면 SQL Server는 자동으로 새로 삽입한 값을 현재 ID 값으로 사용합니다.

SET IDENTITY_INSERT 설정은 구문 분석 시간이 아니라 실행 또는 런타임에 설정됩니다.

사용 권한

사용자는 테이블을 소유하거나 테이블에 대한 ALTER 권한이 있어야 합니다.

다음 예에서는 ID 열이 있는 테이블을 만든 다음 SET IDENTITY_INSERT 설정을 사용하여 DELETE 문으로 인해 생긴 ID 값의 차이를 채우는 방법을 보여 줍니다.

USE AdventureWorks2022;
GO

도구 테이블을 만듭니다.

CREATE TABLE dbo.Tool
(
    ID INT IDENTITY NOT NULL PRIMARY KEY,
    Name VARCHAR (40) NOT NULL
);
GO

제품 테이블에 값을 삽입합니다.

INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
    ('Hammer'),
    ('Saw'),
    ('Shovel');
GO

ID 값에 간격을 만듭니다.

DELETE dbo.Tool
WHERE Name = 'Saw';
GO

SELECT *
FROM dbo.Tool;
GO

명시적 ID 값 3을 삽입합니다.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

이전 INSERT 코드는 다음 오류를 반환해야 합니다.

An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.

IDENTITY_INSERT ON설정합니다.

SET IDENTITY_INSERT dbo.Tool ON;
GO

명시적 ID 값 3을 삽입합니다.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

SELECT *
FROM dbo.Tool;
GO

도구 테이블을 놓습니다.

DROP TABLE dbo.Tool;
GO