Para terminar a série de artigos sobre colunas auto-numeradas, seguem duas novas dicas: "Reiniciando uma coluna IDENTITY" e "Especificando o valor para a coluna IDENTITY ao inserir uma linha":
Reiniciando uma coluna IDENTITY
É
possível definir o valor da coluna IDENTITY a ser atribuído à próxima
linha inserida na tabela. O comando DBCC CHECKIDENT realiza esta tarefa.
DBCC CHECKIDENT (yourtable, reseed, 34)
Importante: caso
seja necessário configurar manualmente o próximo valor para a coluna
IDENTITY pertencente a chave primária da tabela, tome o cuidado de
configurar um valor superior a todos os valores já inseridos para esta
coluna, evitando conflitos com os registros já existentes. Para garantir
que isto realmente acontecerá, pode-se utilizar o comando para
encontrar o menor valor permitido para reiniciar o auto-incremento:
SELECT MAX(nome_campo) + 1 FROM tabela
Especificando o valor para a coluna IDENTITY ao inserir uma linha
Por padrão, não é possível definir o valor para uma coluna IDENTITY ao inserir ou atualizar um registro. Ao tentar realizar esta operação, o seguinte erro será lançado:
Msg 8101, Level 16, State 1, Line 7
An explicit value for the identity column in table [tabela] can only be specified when a column list is used and IDENTITY_INSERT is ON.
Veja o erro abaixo:
Entretanto, pode-se utilizar o comando
SET para alterar a propriedade
IDENTITY_INSERT da tabela desejada e desabilitar temporariamente a validação que causa o erro acima. Assim, os comandos para realizar esta tarefa teriam a seguinte estrutura:
SET IDENTITY_INSERT nome_tabela ON
/* Comandos para inserir registros na tabela
determinando valores para a coluna IDENTITY */
INSERT INTO nome_tabela (campo1,campo2,... ,campoN)
VALUES(valor1,valor2,... , valorN)
SET IDENTITY_INSERT nome_tabela OFF
Importante: Ao habilitar a inserção de valores para a coluna IDENTITY, é necessário explicitar o nome das colunas da tabela no comando INSERT.
No exemplo abaixo, a linha que causou erro no exemplo anterior é inserida com sucesso.
OBSERVAÇÃO: Ao inserir uma linha com um valor maior do que a contagem atual para a coluna IDENTITY, a numeração automática será automaticamente modificada para iniciar a partir do valor inserido.
DBCC CHECKIDENT (Transact-SQL)