DBCC CHECKIDENT(Transact-SQL)

SQL Server 2012에서 지정한 테이블의 현재 ID 값을 검사하고 필요에 따라 변경합니다. DBCC CHECKIDENT를 사용하여 ID 열의 새 현재 ID 값을 수동으로 설정할 수도 있습니다.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

DBCC CHECKIDENT 
 ( 
    table_name
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

인수

  • table_name
    현재 ID 값을 검사할 테이블의 이름입니다. 지정한 테이블에는 ID 열이 있어야 합니다. 테이블 이름은 식별자에 대한 규칙을 따라야 합니다.

  • NORESEED
    현재 ID 값을 변경하지 않도록 지정합니다.

  • RESEED
    현재 ID 값을 변경하도록 지정합니다.

  • new_reseed_value
    ID 열의 현재 값으로 사용할 새 값입니다.

  • WITH NO_INFOMSGS
    모든 정보 메시지를 표시하지 않습니다.

주의

현재 ID 값의 구체적인 수정 사항은 매개 변수 지정에 따라 달라집니다.

DBCC CHECKIDENT 명령

ID 수정 사항

DBCC CHECKIDENT ( table_name, NORESEED )

현재 ID 값을 다시 설정하지 않습니다. DBCC CHECKIDENT는 ID 열의 현재 ID 값과 현재 최대값을 반환합니다. 두 값이 같지 않으면 ID 값을 다시 설정하여 잠재적 오류를 방지하고 값이 간격 없이 순서대로 지정되도록 해야 합니다.

DBCC CHECKIDENT ( table_name )

또는

DBCC CHECKIDENT ( table_name, RESEED )

테이블의 현재 ID 값이 ID 열에 저장된 최대 ID 값보다 작을 경우 ID 열의 최대값을 사용하여 다시 설정됩니다. 뒷부분에 나오는 '예외' 섹션을 참조하십시오.

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

현재 ID 값이 new_reseed_value로 설정됩니다. 테이블이 생성된 후 삽입된 행이 없거나 TRUNCATE TABLE 문을 사용하여 모든 행을 제거한 경우에는 DBCC CHECKIDENT를 실행한 후에 처음 삽입되는 행이 new_reseed_value를 ID로 사용하게 됩니다. 그렇지 않으면 다음에 삽입된 행은 new_reseed_value + 현재 증분 값을 사용합니다.

테이블이 비어 있지 않은 경우 ID 값을 ID 열의 최대값보다 작은 숫자로 설정하면 다음 조건 중 하나가 발생할 수 있습니다.

  • ID 열에 PRIMARY KEY 또는 UNIQUE 제약 조건이 있으면 생성된 ID 값이 기존 값과 충돌하므로 나중에 테이블에 삽입 작업을 수행할 때 오류 메시지 2627이 생성됩니다.

  • PRIMARY KEY 또는 UNIQUE 제약 조건이 없으면 나중에 삽입 작업을 수행할 때 중복 ID 값이 생성됩니다.

예외

다음 표에서는 DBCC CHECKIDENT가 자동으로 현재 ID 값을 다시 설정하지 않는 조건을 보여 주고 해당 값을 다시 설정하는 방법을 제공합니다.

조건

다시 설정 방법

현재 ID 값이 테이블의 최대값보다 큰 경우

  • DBCC CHECKIDENT (table_name, NORESEED)를 실행하여 열의 현재 최대값을 확인한 다음 이 값을 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) 명령에서 new_reseed_value로 지정합니다.

또는

  • new_reseed_value를 매우 낮은 값으로 설정하고 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value)를 실행한 다음 DBCC CHECKIDENT (table_name, RESEED)를 실행하여 값을 수정합니다.

모든 행이 테이블에서 삭제되는 경우

new_reseed_value를 원하는 시작 값으로 설정하고 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value)를 실행합니다.

초기값 변경

초기값은 테이블에 로드되는 제일 첫 번째 행에 대한 ID 열에 삽입되는 값입니다. 현재 ID 값이 테이블 또는 뷰에서 생성된 마지막 ID 값인 경우 이후의 모든 행에는 현재 ID 값과 증가값이 포함됩니다.

DBCC CHECKIDENT는 다음과 같은 태스크를 수행하는 데 사용할 수 없습니다.

  • 테이블 또는 뷰에서 ID 열을 만드는 동안 지정된 원래 초기값을 변경합니다.

  • 테이블 또는 뷰에서 기존 행의 초기값을 다시 설정합니다.

원래 초기값을 변경하고 기존 행의 초기값을 다시 설정하려면 ID 열을 삭제하고 새로운 초기값을 지정하여 다시 만들어야 합니다. 테이블에 데이터가 포함된 경우 지정된 초기값 및 증가값을 사용하여 기존 행에 ID 번호가 추가됩니다. 행이 업데이트되는 순서는 보장되지 않습니다.

결과 집합

ID 열이 포함된 테이블의 경우 DBCC CHECKIDENT는 옵션 지정 여부에 관계없이 모든 작업에 대해 다음 메시지를 반환합니다. 새 초기값을 지정할 때는 예외입니다.

Checking identity information: current identity value '<current identity value>', current column value '<current column value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

RESEED new_reseed_value를 사용하여 새 초기값을 지정하는 데 DBCC CHECKIDENT가 사용될 경우에는 다음 메시지가 반환됩니다.

Checking identity information: current identity value '<current identity value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

사용 권한

호출자는 테이블을 소유하거나 sysadmin 고정 서버 역할, db_owner 고정 데이터베이스 역할 또는 db_ddladmin 고정 데이터베이스 역할의 멤버여야 합니다.

1.필요에 따라 현재 ID 값 다시 설정

다음 예에서는 필요에 따라 AdventureWorks2012 데이터베이스에서 지정된 테이블의 현재 ID 값을 다시 설정합니다.

USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

2.현재 ID 값 보고

다음 예에서는 AdventureWorks2012 데이터베이스에 있는 지정된 테이블의 현재 ID 값을 보고하고, ID 값이 잘못되었더라도 그 값을 수정하지 않습니다.

USE AdventureWorks2012; 
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED); 
GO

3.현재 ID 값을 새로운 값으로 설정

다음 예에서는 AddressType 테이블에 있는 AddressTypeID 열의 현재 ID 값을 10으로 강제 설정합니다. 이 테이블에는 기존 행이 있으므로 다음에 삽입되는 행은 열에 대해 정의된 현재 새 증분 값에 1을 더한 11을 값으로 사용합니다.

USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

참고 항목

참조

ALTER TABLE(Transact-SQL)

CREATE TABLE(Transact-SQL)

DBCC(Transact-SQL)

IDENTITY(속성)(Transact-SQL)

USE(Transact-SQL)

IDENT_SEED(Transact-SQL)

IDENT_INCR(Transact-SQL)

개념

ID 열 복제