연구개발/DBA
SET IDENTITY_INSERT
HEAD1TON
2010. 8. 6. 01:45
SET IDENTITY_INSERT
명시적 값을 테이블의 ID 열에 삽입할 수 있도록 합니다.
구문
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }
인수
database
지정한 테이블이 있는 데이터베이스의 이름입니다.
owner
테이블 소유자의 이름입니다.
table
ID 열이 있는 테이블의 이름입니다.
비고
언제든지 세션에서 한 테이블의 IDENTITY_INSERT 속성만 ON으로 설정할 수 있습니다. 한 테이블에 이 속성이 ON으로 설정되어 있는데 다른 테이블에 대해 SET IDENTITY_INSERT ON 문을 실행하면 Microsoft® SQL Server™는 SET IDENTITY_INSERT가 이미 ON으로 설정되어 있음을 알리고 ON으로 설정된 테이블을 보고하는 오류 메시지를 반환합니다.
테이블의 현재 ID 값보다 큰 값을 삽입하면 SQL Server는 자동으로 새로 삽입한 값을 현재 ID 값으로 사용합니다.
SET IDENTITY_INSERT 옵션은 실행시간이나 런타임에 설정되며, 구문 분석 시간에는 설정되지 않습니다.
사용 권한
기본적으로 sysadmin 고정 서버 역할, db_owner 및 db_ddladmin 고정 데이터베이스 역할 및 개체 소유자에게 실행 권한이 부여됩니다.
예제
다음 예제는 ID 열이 있는 테이블을 만든 다음 SET IDENTITY_INSERT 설정을 사용해 DELETE 문으로 인해 생긴 ID 값의 차이를 메우는 방법을 보여 줍니다.
-- Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
-- Inserting values into products table.
INSERT INTO products (product) VALUES ('screwdriver')
INSERT INTO products (product) VALUES ('hammer')
INSERT INTO products (product) VALUES ('saw')
INSERT INTO products (product) VALUES ('shovel')
GO
-- Create a gap in the identity values.
DELETE products
WHERE product = 'saw'
GO
SELECT *
FROM products
GO
-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO
-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO
-- SET IDENTITY_INSERT to OFF.
SET IDENTITY_INSERT products OFF
GO
SELECT *
FROM products
GO
-- Drop products table.
DROP TABLE products
GO