Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos S.

[Resolvido] Cursor SQL

Recommended Posts

Olá Pessoal, tudo tranquilo?

Sou novo aqui no Forum iMasters e gostaria de parabenlizar pela excelente organização deste Forum...show de Bola!

Mais vamos lá, gostaria de tirar uma pequena dúvida com vocês (antecipadamente fiz uma busca no site e não encontrei nada relacionado).

Tenho um BD com uma tabela "Pessoa" contendo vários campos com dados pessoas (uma tabela de cadastro de pessoas), nela contém um campos chamado "numeroCPF" VARCHAR(11), como mostra no exemplo abaixo:

 

Imagem Postada

 

Como vocês podem ver, o campo "numeroCPF" em todas as linhas estão com "00000000000" e será necessário que nenhuma das linhas se repita pois preciso criar um Indice para esse campo, deixando como Único. (estas linhas acima são somente para exemplo, na realiade são mais de 1500 linhas!)

Aí eu pergunto para vocês, como se faz um Cursor para ir incrementando "+1" em cada linha seguinte (não tem problema se o campo esteja com CPF invalido)? Ficando assim:

 

Linha 1: "00000000000" +1 = 00000000001

Linha 2: "00000000001" +1 = 00000000002

Linha 3: "00000000002" +1 = 00000000003

e assim por diante até a ultima linha...

 

Fiz alguns testes mais infelizmente não deu certo.

Se acharem outra solução diferente do exemplo acima agradeço também!

 

Agradeço a todos desde já!

 

Marcos S.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual versão do SQL você esta usando?

 

Exemplo do uso de cursor no SQL:


declare @tab  table (idPes int, cpf varchar(15))
insert into @tab (idPes,  cpf) values (1, '12345678909')
insert into @tab (idPes,  cpf) values (2, '00000000000')
insert into @tab (idPes,  cpf) values (3, '00000000000')
insert into @tab (idPes,  cpf) values (4, '00000000000')
insert into @tab (idPes,  cpf) values (5, '60608909667')

select * from @tab  where cpf = '00000000000' order by idPes,cpf

DECLARE @idPes as int, @cpf as varchar(15), @seq as int 
DECLARE mycursor CURSOR FOR 
select * from @tab  where cpf = '00000000000' order by idPes,cpf
OPEN mycursor
FETCH NEXT FROM mycursor
INTO @idPes, @cpf

select @seq = 0
WHILE @@FETCH_STATUS = 0
BEGIN
	select @seq = @seq + 1
    update @tab set cpf = @cpf + rtrim(ltrim(convert(int,@seq))) where idPes = @idPes

	FETCH NEXT FROM mycursor
	INTO  @idPes, @cpf
END
CLOSE mycursor
DEALLOCATE mycursor
select * from @tab

Você poderia fazer um update direto ser cursor assim:

declare @tab  table (idPes int, cpf varchar(15))
insert into @tab (idPes,  cpf) values (1, '12345678909')
insert into @tab (idPes,  cpf) values (2, '00000000000')
insert into @tab (idPes,  cpf) values (3, '00000000000')
insert into @tab (idPes,  cpf) values (4, '00000000000')
insert into @tab (idPes,  cpf) values (5, '60608909667')

select * from @tab  where cpf = '00000000000' order by idPes,cpf

update @tab set cpf = cpf + rtrim(ltrim(convert(int,idPes))) where idPes = idPes

select * from @tab

Veja o que lhe atende melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual versão do SQL você esta usando?

 

Exemplo do uso de cursor no SQL:


declare @tab  table (idPes int, cpf varchar(15))
insert into @tab (idPes,  cpf) values (1, '12345678909')
insert into @tab (idPes,  cpf) values (2, '00000000000')
insert into @tab (idPes,  cpf) values (3, '00000000000')
insert into @tab (idPes,  cpf) values (4, '00000000000')
insert into @tab (idPes,  cpf) values (5, '60608909667')

select * from @tab  where cpf = '00000000000' order by idPes,cpf

DECLARE @idPes as int, @cpf as varchar(15), @seq as int 
DECLARE mycursor CURSOR FOR 
select * from @tab  where cpf = '00000000000' order by idPes,cpf
OPEN mycursor
FETCH NEXT FROM mycursor
INTO @idPes, @cpf

select @seq = 0
WHILE @@FETCH_STATUS = 0
BEGIN
	select @seq = @seq + 1
    update @tab set cpf = @cpf + rtrim(ltrim(convert(int,@seq))) where idPes = @idPes

	FETCH NEXT FROM mycursor
	INTO  @idPes, @cpf
END
CLOSE mycursor
DEALLOCATE mycursor
select * from @tab

Você poderia fazer um update direto ser cursor assim:

declare @tab  table (idPes int, cpf varchar(15))
insert into @tab (idPes,  cpf) values (1, '12345678909')
insert into @tab (idPes,  cpf) values (2, '00000000000')
insert into @tab (idPes,  cpf) values (3, '00000000000')
insert into @tab (idPes,  cpf) values (4, '00000000000')
insert into @tab (idPes,  cpf) values (5, '60608909667')

select * from @tab  where cpf = '00000000000' order by idPes,cpf

update @tab set cpf = cpf + rtrim(ltrim(convert(int,idPes))) where idPes = idPes

select * from @tab

Veja o que lhe atende melhor.

 

SQL SERVER 2005 ENTERPRISE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ih ai resolveu seu problema coom os exemplos acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ih ai resolveu seu problema coom os exemplos acima?

 

Aew Jothaz, desculpa a demora para responder, deu certo sim! Funcionou perfeitamente! Muito obrigado pela força!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.