DBCC CHECKIDENT(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric의 SQL 데이터베이스

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

이 글과 IDENTITY 문법은 SQL 데이터베이스 엔진의 다양한 플랫폼에서 다릅니다. Microsoft Fabric Data Warehouse 경우 버전 드롭다운 목록에서 Fabric Data Warehouse을 선택하세요.

Transact-SQL 구문 표기 규칙

구문

SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL database in Fabric:

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

Azure Synapse Analytics 구문:

DBCC CHECKIDENT
 (
    table_name
        [ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]

인수

table_name

현재 ID 값을 검사할 테이블의 이름입니다. 지정한 테이블에는 반드시 항등성 열이 있어야 합니다. 테이블 이름은 식별자에 적용되는 규칙을 따라야 합니다. 또는 .과 같이 Person.AddressType[Person].[AddressType]2부분 또는 3부분 이름에는 구분자를 사용하세요.

NORESEED

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

RESEED

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

new_reseed_value

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

NO_INFOMSGS 포함

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

설명

현재 항등성 값에 가해지는 DBCC CHECKIDENT 구체적인 보정은 매개변수 명세에 따라 달라집니다.

DBCC CHECKIDENT 명령 ID 수정 사항
DBCC CHECKIDENT (<table_name>, NORESEED) 현재 ID 값을 다시 설정하지 않습니다. DBCC CHECKIDENT는 ID 열의 현재 ID 값과 현재 최댓값을 반환합니다. 두 값이 같지 않다면, 값 순서에 오류가 생기거나 빈틈이 생기지 않도록 항등 값을 초기화하세요.
DBCC CHECKIDENT (<table_name>)

또는

DBCC CHECKIDENT (<table_name>, RESEED)
테이블의 현재 정체성 값이 정체성 열에 저장된 최대 정식 값보다 작으면, DBCC CHECKIDENT 정체성 열의 최대 값을 사용하여 초기화합니다. 뒷부분에 나오는 예외 섹션을 참조하세요.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) 현재 ID 값이 new_reseed_value로 설정됩니다. 테이블이 생성된 이후 행이 삽입되지 않았거나, 문장을 사용 TRUNCATE TABLE 해 모든 행이 제거된 경우, 실행 DBCC CHECKIDENT 후 삽입된 첫 행이 식별자로 사용됩니다 new_reseed_value . 테이블에 행이 존재하거나 모든 행이 DELETE 삭제된 경우, 다음 삽입 행은 +현재 증가 값을 사용합니다 new_reseed_value . 트랜잭션이 행을 삽입했다가 나중에 롤백하면, 다음 삽입된 행은 해당 행이 삭제된 것처럼 현재 증가 값 + 값을 사용합니다 new_reseed_value . 테이블이 비어 있지 않은 경우 ID 값을 ID 열의 최댓값보다 작은 숫자로 설정하면 다음 조건 중 하나가 발생할 수 있습니다.

- 식별 열에 OR UNIQUE 제약이 존재하면PRIMARY KEY, 생성된 식별 값이 기존 값과 충돌하여 이후 삽입 작업에서 오류 메시지 2627이 생성됩니다.

- 또는 UNIQUE 제약 조건이 존재하지 않으 PRIMARY KEY 면, 이후 삽입 연산에서 동일한 항등 값이 반복됩니다.

예외

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

조건 다시 설정 방법
현재 ID 값이 테이블의 최대값보다 큰 경우 DBCC CHECKIDENT (<table_name>, NORESEED)를 실행하여 열의 현재 최댓값을 확인합니다. 다음으로 명령에서 값을 DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>)로 지정합니다.

또는

DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>)를 낮은 값으로 설정된 new_reseed_value로 실행하고 DBCC CHECKIDENT (<table_name>, RESEED)를 실행하여 값을 수정합니다.
모든 행이 테이블에서 삭제되는 경우 새 문자열 값으로 설정된 DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>)new_reseed_value를 실행합니다.

시드 값 변경

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

다음 작업에 DBCC CHECKIDENT를 사용할 수 없습니다.

  • 테이블 또는 보기를 만들 때 ID 열에 대해 지정된 원래 초기값을 변경합니다.

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

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

결과 집합

ID 열이 포함된 테이블에 대한 옵션을 지정했는지 여부에 관계없이 DBCC CHECKIDENT는 하나를 제외한 모든 작업에 대해 다음 메시지를 반환합니다. 해당 작업은 새 초기값을 지정하는 것입니다.

ID 정보 확인: 현재 ID 값 '<current identity value>', 현재 열 값 '<current column value>'. DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.

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

ID 정보 확인: 현재 ID 값 '<current identity value>'입니다. DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.

사용 권한

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

Azure Synapse Analytics에는 db_owner 권한이 필요합니다.

예제

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

다음 예시는 필요 시 데이터베이스 내 지정된 테이블의 현재 정체성 값을 초기화합니다.

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

B. 현재 ID 값 보고

다음 예시는 데이터베이스에서 지정된 테이블의 현재 식별 값을 보고하며, 잘못된 식별 값을 수정하지 않습니다.

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

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

다음 예시는 테이블 내 AddressType 열의 AddressTypeID 현재 항등성 값을 10으로 강제합니다. 테이블에 기존 행이 있기 때문에 다음 행은 11을 값으로 사용합니다. 열에 1을 더하기 위해 정의된 새로운 현재 항등성 값은 열의 증가 값입니다.

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

D. 빈 테이블에 ID 값 다시 설정

다음 예시는 테이블 (1, 1) 정체성을 가정하고, 테이블에서 모든 레코드를 삭제한 후 해당 열 ErrorLogErrorLogID 현재 정체성 값을 1로 강제합니다. 테이블에 기존 행이 없기 때문에 다음 삽입 행은 값을 1로 사용합니다. TRUNCATE 이후 열에 정의된 증분 값을 추가 하지 않고 , 또는 에 대한 DELETE증가 값을 더하지 않은 새로운 현재 항등성 값입니다.

USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO

적용 대상:Microsoft Fabric의 웨어하우스

Fabric Data Warehouse에서 테이블의 정체성을 재시드합니다. 명시적 값을 삽입한 후 동일 SET IDENTITY_INSERT 시 범위를 재정렬하고 미래 자동 생성 값과의 충돌을 방지하는 데 사용됩니다DBCC CHECKIDENT.

이 글과 IDENTITY 문법은 SQL 데이터베이스 엔진의 다양한 플랫폼에서 다릅니다.

Transact-SQL 구문 표기 규칙

구문

DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )

인수

table_name

정체성 값을 다시 시드할 테이블의 이름입니다. 테이블에는 항등 열이 포함되어야 합니다. 테이블 이름에는 스키마 이름이 포함될 수 있으며, 예: 'dbo.DimCustomer''[dbo].[DimCustomer]'또는 .

RESEED

키워드는 RESEED 선택 사항 DBCC CHECKIDENT 이지만 항상 재시드 작업을 수행합니다. 옵션을 포함시키거나 생략해도 결과는 같습니다.

키워드는 RESEED 데이터베이스 엔진에 사용 및 예약된 모든 식별 범위를 스캔하고 기존 값과의 충돌을 피하기 위해 다음 식별 값을 설정하도록 지시합니다. Fabric Data Warehouse RESEED 는 모든 분산 컴퓨팅 노드를 대상으로 범위 인식 스캔을 수행하여 올바른 다음 값을 결정합니다.

설명

  • Fabric Data Warehouse에서는 항상 수행되는 옵션을 지지하는 유일한 논증 DBCC CHECKIDENTRESEED 있습니다. 시스템은 기존 데이터를 바탕으로 올바른 다음 신원 값 범위를 자동으로 결정합니다. 커스텀 재시드 값을 지정할 수 없습니다.
  • 항상 사용 IDENTITY_INSERT 후 실행 DBCC CHECKIDENT 하여 명시적 값을 삽입하세요. 이 연산은 앞으로 자동으로 생성된 값들이 수동으로 삽입된 값과 충돌하지 않도록 보장합니다.
  • Fabric Data Warehouse에서는 커스텀 new_reseed_value 을 지정하는 것이 지원되지 않습니다. 값을 제공하려 하면 다음과 같은 오류가 나타납니다: Specifying a custom seed in Fabric Data Warehouse is not supported.
  • DBCC CHECKIDENT DML과 DDL 작업을 동시에 차단할 수 있는 잠금장치를 획득합니다. 방해를 최소화하기 위해, 다른 프로세스가 테이블을 사용하지 않을 때는 명령을 따로 실행하세요.

사용 권한

테이블을 소유하거나 테이블에 대한 허가를 받아야 ALTER 합니다.

예제

A. 센티넬 값을 삽입한 후 재시드

센티넬 값을 차원 테이블 SET IDENTITY_INSERT에 채운 후, 앞으로 자동으로 생성된 값이 수동으로 삽입된 값과 충돌하지 않도록 식별 열을 다시 시드합니다.

-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
       (-2, 'Not Applicable');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);

B. 대량 이동 후 재파종

명시적 식별 값을 가진 과거 데이터를 마이그레이션한 후, 새 행이 마이그레이션된 데이터와 겹치지 않는 값을 받도록 테이블을 다시 시드합니다.

-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);

-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');

C. COPY INTO 후 다시 시드 IDENTITY_INSERT

데이터를 COPY INTOIDENTITY_INSERTON로드한 후 , 를 다시 시드 하여 정체성 열을 다시 시드합니다. COPY INTO 옵션들은 에 대한 세션 레벨 설정을 IDENTITY_INSERT덮어씁니다.

COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);

D. RESEED 키워드 없이 재시드

키워드는 RESEED 선택 사항 DBCC CHECKIDENT 이지만 항상 재시드 작업을 수행합니다. 옵션을 포함시키거나 생략해도 결과는 같습니다.

-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');

-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);