Excluí alguns registros de uma tabela em um banco de dados do SQL Server. Agora, os IDs vão de 101 a 1200. Quero excluir os registros novamente, mas quero que os IDs voltem para 102. Existe uma maneira de fazer isso no SQL Server?
sql-server
auto-increment
delete-row
jumbojs
fonte
fonte
Respostas:
Emita o seguinte comando para replanejar mytable para iniciar em 1:
Leia sobre isso nos Livros on-line (ajuda do BOL, SQL). Também tenha cuidado para não ter registros maiores do que a semente que está configurando.
fonte
DBCC CHECKIDENT (mytable, RESEED, 0)
se número = 0, na próxima inserção, o campo de incremento automático conterá o valor 1
se número = 101, na próxima inserção, o campo de incremento automático conterá o valor 102
Algumas informações adicionais ... Pode ser útil para você
Antes de fornecer o incremento automático
number
na consulta acima, você deve garantir que a coluna de incremento automático da tabela existente contenha valores menores que issonumber
.Para obter o valor máximo de uma coluna (nome_da_coluna) de uma tabela (tabela1), você pode usar a seguinte consulta
fonte
semi à prova de idiotas:
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
fonte
Se você estiver usando o MySQL, tente o seguinte:
fonte
Exclua e recompense todas as tabelas em um banco de dados.
fonte
Eu descobri. Está:
fonte
Com base na resposta aceita, para aqueles que encontraram um problema semelhante, com qualificação completa do esquema:
(
[MyDataBase].[MySchemaName].[MyTable]
) ... resulta em um erro, você precisa estar no contexto desse banco de dadosOu seja, o seguinte gerará um erro:
Coloque o nome completo da tabela com aspas simples:
fonte
Várias respostas recomendam o uso de uma declaração como esta:
Mas o OP disse que "excluiu alguns registros", que podem não ser todos, portanto, um valor de 0 nem sempre é o correto. Outra resposta sugeriu encontrar automaticamente o valor atual máximo e reenviar para esse, mas isso pode causar problemas se não houver registros na tabela e, portanto, max () retornará NULL. Um comentário sugerido usando simplesmente
redefinir o valor, mas outro comentário afirmou corretamente que isso apenas aumenta o valor para o máximo já existente na tabela; isso não reduzirá o valor se ele já for maior que o máximo da tabela, que é o que o OP queria fazer.
Uma solução melhor combina essas idéias. O primeiro CHECKIDENT redefine o valor para 0 e o segundo o redefine para o valor mais alto atualmente na tabela, caso haja registros na tabela:
Como vários comentários indicaram, verifique se não há chaves estrangeiras em outras tabelas apontando para os registros excluídos. Caso contrário, essas chaves estrangeiras apontarão para os registros criados após a nova propagação da tabela, o que quase certamente não é o que você tinha em mente.
fonte
Quero adicionar esta resposta porque a
DBCC CHECKIDENT
abordagem-produzirá problemas quando você usar esquemas para tabelas. Use isto para ter certeza:Se você deseja verificar o sucesso da operação, use
que deve aparecer
0
no exemplo acima.fonte
Você não deseja fazer isso em geral. Reseed pode criar problemas de integridade de dados. É realmente apenas para uso em sistemas de desenvolvimento em que você está limpando todos os dados de teste e iniciando novamente. Ele não deve ser usado em um sistema de produção, caso todos os registros relacionados não tenham sido excluídos (nem todas as tabelas que deveriam estar em um relacionamento de chave estrangeira são!). Você pode criar uma bagunça fazendo isso e, especialmente, se quiser fazê-lo regularmente após cada exclusão. É uma má idéia se preocupar com lacunas nos valores dos campos de identidade.
fonte
Que tal isso?
Essa é uma maneira rápida e simples de alterar o incremento automático para 0 ou o número que você desejar. Eu descobri isso exportando um banco de dados e lendo o código pessoalmente.
Você também pode escrevê-lo assim para torná-lo uma solução de linha única:
fonte