이것은 크기에 관계없이 많은 개발자와 응용 프로그램에서 여전히 매우 일반적인 문제입니다.
안타깝게도 위의 제안은 모든 시나리오 (예 : 공유 호스팅)를 수정하지 않습니다. 호스트에 의존하여 -t272 시작 매개 변수를 설정할 수 없습니다.
또한 기본 키에 이러한 ID 열을 사용하는 기존 테이블이있는 경우 해당 열을 삭제하고 BS 시퀀스 해결 방법을 사용하기 위해 새 열을 다시 만드는 것은 엄청난 노력입니다. Sequence 해결 방법은 SQL 2012+에서 처음부터 새로운 테이블을 디자인하는 경우에만 유용합니다.
결론은 Sql Server 2008R2를 사용하는 경우 계속 유지한다는 것입니다. 진지하게, 그것에 머물러 라. Microsoft가 Sql Server 2016에도 여전히 존재하는 거대한 버그를 도입했다고 인정할 때까지, 그들이 소유하고 IT를 수정하기 전까지는 업그레이드하지 말아야합니다.
Microsoft는 곧바로 주요 변경 사항을 도입했습니다. 즉, 시스템을 다시 시작할 때 현재 ID를 잊어 버리기 때문에 더 이상 설계된대로 작동하지 않는 작동하는 API가 손상되었습니다. 캐시 또는 캐시 없음, 이것은 허용되지 않으며 Bryan이라는 이름의 Microsoft 개발자가 "디자인"및 "기능"이라고 세상에 알리는 대신이를 소유해야합니다. 물론 캐싱은 기능이지만 다음 ID가 무엇이어야하는지 추적하지 못하는 것은 기능이 아닙니다. 끔찍한 벌레 다 !!!
내 DB가 공유 호스팅 서버에 있기 때문에 내가 사용한 해결 방법을 공유 할 것입니다. 또한 기본 키 열을 삭제하고 다시 만들지 않습니다. 이는 거대한 PITA가 될 것입니다.
대신 이것은 내 부끄러운 해킹입니다 (하지만 마이크로 소프트가 도입 한이 POS 버그만큼 부끄럽지는 않습니다).
해킹 / 수정 :
삽입 명령 전에 각 삽입 전에 ID를 다시 시드하십시오. 이 수정은 Sql Server 인스턴스에 대한 관리자 제어 권한이없는 경우에만 권장됩니다. 그렇지 않으면 서버를 다시 시작할 때 다시 시드하는 것이 좋습니다.
declare @newId int -- where int is the datatype of your PKey or Id column
select @newId = max(YourBuggedIdColumn) from YOUR_TABLE_NAME
DBCC CheckIdent('YOUR_TABLE_NAME', RESEED, @newId)
삽입 직전의 3 줄만 있으면됩니다. 실제로 성능에 그다지 영향을 미치지 않습니다. 즉, 눈에 띄지 않을 것입니다.
행운을 빕니다.
order by ReceiptNo
쿼리에 추가 하면 해당 레코드가 실제로 존재하지 않습니까? 레코드를 삽입 할 때 오류가 없는지 확실합니까? 레코드가 삽입을 시도하고 실패하면 ID가 증가하고 레코드가 삭제되는 경우에도 마찬가지입니다. 레코드가 삭제되면ReceiptNo
재설정되지 않습니다. 테이블에 대한Fee
테이블 생성을 게시 할 수 있습니까 ?