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!

6 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!!!

Unknown 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.

Unknown disse...

Perfeito! E eu quebrando a cabeça com o WHILE....

Unknown disse...

Como eu faria caso.
EU tenho em uma coluna "ClienteID" com valores iguais(seria o ID do Cliente), e preciso numerar esses valores na coluna "Numero", e quando mudar para o proximo valor na coluna "CLienteID" ele começa no "1" de novo?

Unknown disse...

Cara, se vc morasse perto de mim eu te dava um beijo na boca kkkkkk, estava apanhando pra isso a algumas horas kkkkkk, salvou de maaaaais, obrigado.

Postar um comentário