Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Desenvolvimento » Banco de dados e SQL » SQL Server: Geração de seqüenciais de forma automática -->
 
Avaliação: | Publicado em: 20/09/2007
SQL Server: Geração de seqüenciais de forma automática


Redefinição de valores Identity

Algumas vezes pode ser necessário "zerar" o Identity ou definir um novo valor inicial para novos registros. A forma mais intuitiva de tentar "zerar" uma coluna Identity é excluir todos os registros de uma tabela (situação típica durante um Deploy para o ambiente de produção). O fato de executar um DELETE contra uma tabela não irá "zerar" o Identity. Da mesma forma que nos exemplos anteriores, o DELETE de um registro não provoca o reaproveitamento de seqüenciais, a exclusão de todos os registros também não tem efeito para provocar esse reaproveitamento.

Uma das forma de se fazer isso, é através do comando TRUNCATE TABLE. Esse comando possibilita que o Identity seja reiniciado, mas em contrapartida exclui todos os registros de uma tabela desde que essa possua chaves estrangeiras e nem repassar suas chaves primárias para outras tabelas. Se isso não for possível, o comando irá gerar um erro. Esse comando é representado conforme script abaixo:

-- Criação de uma tabela com Identity
CREATE TABLE tblPecas (
    CODIGO INT IDENTITY,
    NOME VARCHAR(50))

-- Inserção de registros
INSERT INTO tblPecas (NOME) VALUES ('Parafuso')
INSERT INTO tblPecas (NOME) VALUES ('Porca')

-- Verificação do Identity
SELECT
    CODIGO, NOME
FROM
    tblPecas

-- Exclusão do registros com TRUNCATE TABLE
TRUNCATE TABLE tblPecas

-- Inserção de registros
INSERT INTO tblPecas (NOME) VALUES ('Prego')

-- Verificação do Identity
SELECT
    CODIGO, NOME
FROM
    tblPecas

Embora o comando TRUNCATE possa fazer isso, o mais "correto" seria utilizar o comando DBCC CHECKIDENT. Esse comando permite tanto checar o valor atual de uma coluna Identity para uma tabela específica como alterar esse valor se necessário. O exemplo abaixo, mostra como utilizar esse comando para alterar o valor de uma coluna Identity.

-- Criação de uma tabela com Identity
CREATE TABLE tblAlunos (
    AlunoID INT IDENTITY,
    Nome VARCHAR(50))

-- Inserção de registros
INSERT INTO tblAlunos (Nome) VALUES ('Daniel')
INSERT INTO tblAlunos (Nome) VALUES ('Fernando')

-- Verificação do Identity
SELECT
    AlunoID, Nome
FROM
    tblAlunos

-- Exclusão dos registros
DELETE FROM tblAlunos

-- Reiniciar o Identity
DBCC CHECKIDENT('tblAlunos',RESEED,0)

-- Inserção de registros
INSERT INTO tblAlunos (Nome) VALUES ('Hernani')
INSERT INTO tblAlunos (Nome) VALUES ('Isadora')

-- Verificação do Identity
SELECT
    AlunoID, Nome
FROM
    tblAlunos

No exemplo acima, são inseridos dois alunos (Daniel e Fernando) com IDs 1 e 2 e em seguida é realizado um DELETE. Para reiniciar o Identity, o comando DBCC CHECKIDENT é executado com um de seus parâmetros igual a zero. O parâmetro zero não quer dizer que o Identity está sendo "zerado". O número zero é usado porque no terceiro parâmetro é preciso usar o valor desejado do Identity decrescido de uma unidade. Se desejássemos que o Identity reinicasse em 3, teríamos que executar DBCC CHECKIDENT('tblAlunos',RESEED,2).