SET IDENTITY_INSERT(Transact-SQL)
적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse Analytics
명시적 값을 테이블의 ID 열에 삽입할 수 있도록 합니다.
구문
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
관련 콘텐츠
- CREATE TABLE(Transact-SQL)
- CREATE TABLE(Transact-SQL) IDENTITY(속성)
- SCOPE_IDENTITY(Transact-SQL)
- INSERT(Transact-SQL)
- SET 문(Transact-SQL)