본문 바로가기

데이터베이스/MS SQL Server

SQL Server Identity Column 초기화 하기

1. DBCC CHECKIDENT
가장 쉬운방법. 하지만 테이블내에 있는 값들보다 작은 값을 설정하지 않도록 주의한다. 만약 작은 값이 설정되면 primary key violation(주키 위반)이 발생하기 때문이다. 

구문: DBCC CHECKIDENT (<table name>,RESEED,<new value>)
예) DBCC CHECKIDENT ('TB_MB_MEMBER',RESEED,0)


Tip. 만약 DB 소유자가 아니고 권한만 있는 경우

USE <db name>
GO

명령을 사용하여 해당 DB Context로 이동한다.

2. Drop and Add the column
이 방법은 첫번째보다 조금 더 안정적인데 이유는 새로운 시드(seed)값을 자동으로 할당해 주기 때문이다. 그러나 많은 작업을 해야하고 컬럼의 순서가 변경된다.
당연한 얘기이겠지만 만약 코드에서 컬럼순서로 접근(access)하고 있었다면 컬럼순서를 재조정해야만 한다. 

ALTER TABLE <table name> DROP CONSTRAINT <constraint name>
ALTER TABLE <table name> DROP COLUMN <column name>
ALTER TABLE <table name> ADD <column name> bigint identity (1,1) NOT NULL
ALTER TABLE <table name> ADD CONSTRAINT <constraint name> PRIMARY KEY CLUSTERED(
<column name> ASC
)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]


3. Drop and Create the table
이 방법은 두가지 문제 즉, 안정적으로 새로운 값을 설정하는 것과 컬럼의 순서를 유지하는 것이 해결된다. 그러나 이 방법 또한 많은 작업을 해야한다.

동일한 구조를 갖는 새로운 임시 테이블 생성 -> 모든 데이터를 임시 테이블로 복사 -> 이전 테이블 삭제(DROP) -> 임시 테이블 이름 변경



참고 사이트: 
http://www.dev102.com/2008/03/22/how-to-reset-identity-increment-value-in-ms-sql/