SET IDENTITY_INSERT(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure 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 tool table.
CREATE TABLE dbo.Tool(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
GO
-- Inserting values into products table.
INSERT INTO dbo.Tool(Name)
VALUES ('Screwdriver')
, ('Hammer')
, ('Saw')
, ('Shovel');
GO
-- Create a gap in the identity values.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
-- Try to insert an explicit ID value of 3;
-- should return an error:
-- 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.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.Tool ON;
GO
-- Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
-- Drop tool table.
DROP TABLE dbo.Tool;
GO
참고 항목
CREATE TABLE(Transact-SQL)
IDENTITY(속성)(Transact-SQL)
SCOPE_IDENTITY(Transact-SQL)
INSERT(Transact-SQL)
SET 문(Transact-SQL)