terça-feira, 29 de novembro de 2011

UPDATE com incremento


O script abaixo realiza uma tarefa interessante. Através dele é possível atualizar as linhas de uma tabela (ou um conjunto de linhas, caso um filtro seja aplicado) com valores incrementais (o valor inicial e o incremento podem ser definidos).


-- Criando tabela temporária para testes
CREATE TABLE #tmp (id int primary key identity(1,1), counter int default 0)
GO

-- Inserindo dados na tabela
INSERT INTO #tmp DEFAULT VALUES
GO 10

-- Veja como está a tabela
SELECT * FROM #tmp

-- PREENCHENDO O CAMPO counter  COM VALORES INCREMENTAIS
DECLARE @counter int
SET @counter = 0

UPDATE #tmp
SET @counter = counter = @counter + 1

-- Veja novamente a tabela com o campo counter preenchido
SELECT * FROM #tmp

Este script pode ser utilizado para popular qualquer campo que apresente um caráter sequencial, independente do incremento a ser utilizado.

Através dele, pode-se evitar o uso de Cursores e laços While ao fazer atualizações grandes em tabelas. 

Já recorri a ele algumas vezes. Foi bastante útil!

Até a próxima!

3 comentários:

Anônimo disse...

Muito show ...

Alexandre Paiva disse...

Veja a dica sendo usada em uma solução real:
DECLARE @counter int
SET @counter = (select max(codcliente)+1 from clientes);

update clientes
set @counter = CodCliente = @counter + 1
where codcliente = 0

Obrigado pela dica!!!

Marcio Silveira disse...

Show de bola pela dica !!!

Funcionou perfeito no meu caso....


declare @IdNovo int
select @IdNovo = Max(IdGeoCidade) from GeoCidade

update GeoCidade2 set @IdNovo = IdGeoCidade = @IdNovo + 1


No meu caso precisei colocar na sequencia o ID conforme tabela original de cidade pois depois os dados da tabela GeoCidade2 irá para tabela GeoCidade e será dropada tabela temporária (GeoCidade2).


Abraço.

Postar um comentário