Esse ainda é um problema muito comum entre muitos desenvolvedores e aplicativos, independentemente do tamanho.
Infelizmente, as sugestões acima não corrigem todos os cenários, ou seja, hospedagem compartilhada, você não pode confiar no seu host para definir o parâmetro de inicialização -t272.
Além disso, se você possui tabelas existentes que usam essas colunas de identidade para chaves primárias, é um enorme esforço para eliminar essas colunas e recriar novas para usar a solução alternativa da sequência BS. A solução alternativa de Sequência só é boa se você estiver criando as tabelas novas do zero no SQL 2012+
A linha inferior é, se você estiver no Sql Server 2008R2, FIQUE LIGADO. Sério, fique nele. Até a Microsoft admitir que eles introduziram um bug ENORME, que ainda existe no Sql Server 2016, não devemos atualizar até que eles sejam os proprietários e o CORRETAMENTE.
A Microsoft introduziu imediatamente uma mudança de quebra, ou seja, quebrou uma API funcional que não funciona mais como projetada, devido ao fato de que seu sistema esquece sua identidade atual em uma reinicialização. Cache ou sem cache, isso é inaceitável, e o desenvolvedor da Microsoft, com o nome de Bryan, precisa possuí-lo, em vez de dizer ao mundo que é "por design" e um "recurso". Certamente, o armazenamento em cache é um recurso, mas perder a noção do que deve ser a próxima identidade NÃO É UM RECURSO. É um erro fricken !!!
Compartilharei a solução alternativa que usei, porque os Meus DBs estão em servidores de Hospedagem Compartilhada e também não estou descartando e recriando minhas colunas de Chave Primária, que seria uma PITA enorme.
Em vez disso, esse é meu truque vergonhoso (mas não tão vergonhoso quanto esse bug do POS que a microsoft introduziu).
Hack / Correção:
Antes dos comandos de inserção, basta reenviar sua identidade antes de cada inserção. Essa correção é recomendada apenas se você não tiver controle de administrador sobre sua instância do Sql Server; caso contrário, sugiro que continue com a reinicialização do servidor.
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)
Apenas essas três linhas imediatamente antes da inserção e você deve estar pronto. Realmente não afetará muito o desempenho, ou seja, será imperceptível.
Boa sorte.
order by ReceiptNo
à sua consulta, esses registros realmente não estão lá? Tem certeza de que quando os registros estão sendo inseridos, não há erros? Se um registro tentar ser inserido e falhar, a identidade será incrementada, o mesmo se os registros forem excluídos. Se os registros forem excluídos,ReceiptNo
não será redefinido. Você pode postar a tabela de criação para aFee
tabela?