2014-04-26 2 views
1

56 행이있는 테이블이 있습니다. 새 행을 추가하면 ID 59부터 시작합니다.새 행을 추가 할 때 일부 값을 생략하는 식별 열

ID 57을 계속하려면 어떻게해야합니까?

+4

당신이 id 컬럼을 다시 시드 할 필요가 ... http://blog.sqlauthority.com/2007/03/15/sql-server-dbcc-reseed-table-identity-value-reset-table- identity/ – Milen

답변

2

테이블에서 열을 삭제하거나 ID를 높은 수로 변경하면 이러한 상황이 발생합니다.

신원을 재설정 할 수는 있지만 그럴만 한 이유가 없으면 (좋은 이유는 대부분의 테이블 내용을 삭제할 수 있습니다.) 그렇게하지 않는 것이 좋습니다. 정체성을 다시 시드하는 방법

일부 세부 사항은 here 찾을 수 있습니다 new_reseed_value이 특정 사건에 대한 57 일 곳

그리고 그것을 사용하는 방법은

DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) 

이다 (신원이 시작됩니다 즉, 57 세부터). 그러나 ID가 57보다 큰 테이블에 항목이 있으면 실패합니다.

다른 방법으로 사용할 수 있습니다

SET IDENTITY_INSERT Table_Name ON 
INSERT INTO Table_Name(ID, Other_Columns,You_Are_Inserting,You_Must_Specify_All_Of_Them) 
VALUES (57, 'SomeData','OtherData',...) 
SET IDENTITY_INSERT Table_Name OFF 

이것은 당신이 시드없이 구체적으로 식별 컬럼 값을 지정하여 삽입 할 수 있습니다. 또한 현재 ID보다 높은 값을 삽입하지 마십시오. 삽입시 오류가 발생합니다.

+1

2012 년 인스턴스를 다시 시작하기 만하면 최대 1,000 와이드까지 '성능 최적화'라고하는 간격이 생길 수 있으며 데이터베이스 외부에서 ID를 노출하지 않는 또 다른 이유가 있습니다. 한 가지 더 : 테이블에 ID가 더 큰 값을 다시 시드하면 RESEED가 실패하지 않습니다. 컬럼에 PK/UQ 제약 조건이없는 한 ID는 복제본에도 상당히 만족합니다 (대개 OK ...입니다.) 직접 시도하십시오. – dean

0

예상되는 동작은 IDENTITY입니다. 연속적인 숫자를 원한다면 새로운 행을 삽입 할 때마다 ID 값이 증가하므로 마지막 행을 삭제하면 이 아닌이 감소하지 않으며 트랜잭션을 시작하면 감소합니다 , 새 행을 삽입 한 다음 트랜잭션을 롤백하십시오.

DBCC CHECKIDENT 명령을 사용하여 ID 값을 변경할 수 있지만 실제로는 비표준 열로 변경하고 자신의 코드에서 값을 관리해야합니다.

0

특정 테이블에 대해 Identity_insert을 켜야합니다.

SET IDENTITY_INSERT YourTableName ON 

Insert into YourTableName (IDField,rest of the column names) 
values (57, rest of the column values) 

SET IDENTITY_INSERT YourTableNAme OFF 
관련 문제