DB/MS-SQL

SET IDENTTIY_INSERT 사용시 주의할 점.

채윤아빠 2009. 11. 26. 12:53
728x90
반응형

세션에서 한 테이블의 IDENTITY_INSERT 속성만 ON으로 설정할 수 있습니다.
CREATE TABLE IDENTITY1 ( id_no INT IDENTITY(1, 1), data1 VARCHAR(100) )
GO
CREATE TABLE IDENTITY2 ( id_no INT IDENTITY(1, 1), data2 VARCHAR(100) )
GO

SET IDENTITY_INSERT IDENTITY1 ON

SET IDENTITY_INSERT IDENTITY2 ON

위 코드를 실행하면 아래와 같은 오류가 발생하게 됩니다.
메시지 8107, 수준 16, 상태 1, 줄 1
IDENTITY_INSERT is already ON for table 'master.dbo.IDENTITY1'. Cannot perform SET operation for table 'IDENTITY2'.


sysadmin 고정 서버 역할, db_owner 및 db_ddladmin 고정 데이터베이스 역할 및 개체 소유자에게 실행 권한이 부여됩니다.
위 예제를 권한이 없는 일반 로그인(Login)으로 실행하면 아래와 같은 오류가 발생하게 됩니다.
메시지 1088, 수준 16, 상태 11, 줄 1
개체 "IDENTITY1"이(가) 없거나 권한이 없으므로 이를 찾을 수 없습니다.


테이블의 현재 ID 값보다 큰 값을 삽입하면 SQL Server는 자동으로 새로 삽입한 값을 현재 ID 값으로 사용합니다.
INSERT INTO IDENTITY1 VALUES ( 'data1' );
INSERT INTO IDENTITY1 VALUES ( 'data2' );
INSERT INTO IDENTITY1 VALUES ( 'data3' );
GO

SELECT COUNT(*), MAX(id_no) FROM IDENTITY1 -- 3, 3
GO

SET IDENTITY_INSERT IDENTITY1 ON
INSERT INTO IDENTITY1 (id_no, data1) VALUES ( 7, 'data3' );
SET IDENTITY_INSERT IDENTITY1 OFF
GO

SELECT COUNT(*), MAX(id_no) FROM IDENTITY1 -- 4, 7
GO