728x90 AdSpace

17 de jun. de 2008

Tratando colunas Identity no SQL Server

Bom, deixa primeiro eu me apresentar.
Me chamo Thiago Zavaschi, trabalho na empresa TechResult como Desenvolvedor e DBA.
Sou formado em Ciência da Computação pela PUC-PR, e atualmente curso mestrado em Informática Aplicada na área de Reconhecimento de Padrões (reconhecimento de expressões faciais) também pela PUC-PR.
Possuo um blog pessoal sobre tecnologia também, atualmente os assuntos estão mais gerais, mas em breve o foco será o SQL Server e bancos de dados em geral, o endereço para quem se interessar: www.zavaschi.com.

Bom, vamos ao que interessa, algumas dicas básicas para quem precisa mexer com campos identity:

Em muitas ocasiões nos deparamos com situações em que precisamos trabalhar em alguma coluna que seja identity. Este mini-artigo descreve alguns comandos úteis na manipulação destas colunas.

Criando uma tabela com campo identity: Devemos criar com o parâmetro identity, e configurar o primeiro valor, e o valor de incremento, respectivamente (IDENTITY (<inicio>,<incremento>)). Conforme no exemplo a seguir:

CREATE TABLE Tabela (
      Id INT IDENTITY (1,1) PRIMARY KEY,
      Valor VARCHAR(50)
)

Reiniciando o valor do campo identity: Algumas vezes precisamos alterar o valor do identity (para reiniciar a contagem, por exemplo). Há o comando truncate que além de limpar a tabela (entre outras coisas), também zera o valor do identity. No entanto, se o nosso objetivo é apenas trocar o valor do identity, o truncate não é uma saída interessante. Para manipular o identity podemos fazer como descrito a seguir:

Vamos imaginar que queremos que o próximo registro a ser inserido na tabela Tabela queremos que sua chave primária Id, se inicie em 1.

Para resolver esse problema, podemos usar a seguinte instrução:

DBCC CHECKIDENT (Tabela, reseed, 0)

O último parâmetro se torna o valor atual do identity. Ao inserir o próximo registro, o mesmo virá com o seu Id com o valor identity somado de 1 (caso seja um identity de incremento 1), o valor do identity da tabela vai para 1, e assim por diante.

Recuperar o último valor inserido de um campo identity: Para recuperar o último valor de identity inserido (ex: inserir algo em uma tabela, e cadastrar um novo registro com o id do registro recém inserido), podemos utilizar:

· @@IDENTITY, que retorna o valor do identity do último registro inserido na tabela, ou;

· SCOPE_IDENTITY(), que retorna o último valor mas dentro do escopo em que a query foi executada.

Não recomendo a utilização de @@IDENTITY, pois isso pode acarretar problemas de consistência em cenários onde existe um alto grau de inserção/manipulação dos dados no banco (ou mais especificamente, na tabela em questão).

Um exemplo simples de uso pode ser:

DECLARE @techId INT
INSERT INTO Tabela (Valor) VALUES (‘Testando Identity’)
SELECT @techId = SCOPE_IDENTITY()

Bom… espero que a informação seja útil.
Em breve mais posts meus, abraços!

no image
  • Blogger Comments
  • Facebook Comments

0 comentários :

Top