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


Sobrescrita de Valores Identity

Em algumas situações, pode ser necessário sobrescrever o valor gerado por uma coluna Identity. A situação mais comum para que isso ocorra, é quando registros externos deverão popular a tabela como por exemplo a importação de um arquivo texto, ou ainda a presença de registros replicados de um outro servidor SQL Server. Embora os mecanismos de carga e replicação nativas do SQL Server já prevejam essa possibilidade, é possível fazer isso diretamente no Transact SQL. O exemplo abaixo demonstra como fazer isso:

-- Criação de duas tabelas com Identity
CREATE TABLE tblPessoas (
    Codigo INT IDENTITY,
    Nome VARCHAR(50))

-- Gera um INSERT para aproveitar o Identity
INSERT INTO tblPessoas (Nome) VALUES ('Thiago')

-- Prepara a tabela tblPessoas para sobrescrita
SET IDENTITY_INSERT tblPessoas ON

-- Gera um INSERT normal
INSERT INTO tblPessoas (Codigo, Nome) VALUES (2,'Ricardo')

-- Gera um INSERT com o mesmo código
INSERT INTO tblPessoas (Codigo, Nome) VALUES (2,'Leonardo')

-- Desativa a tabela tblPessoas para sobrescrita
SET IDENTITY_INSERT tblPessoas OFF

-- Confere os valores gerados
SELECT
    Codigo, Nome
FROM
    tblPessoas

É interessante notar que embora a coluna seja Identity, ela não impede valores duplicados. No exemplo acima, foi possível inserir dois registros com o mesmo código. Isso demonstra que o Identity pode gerar seqüenciais que em princípio são únicos, mas ele por si só não garante a unicidade do registro.