Problema com cursor em SQL Server

4 respostas
R

Olá, grupo.

Estou tentando fazer um cursor com a seguinte finalidade:
Tenho uma tabela que possui um campo do tipo varchar de 100 e tenho que dividí-lo em vários campos.
Segue abaixo um exemplo do conteúdo deste varchar.

2912 ALBERTO WILSON SILVA SOUZA [CPF removido] Bloco 200 - 23.° andar - Sala 20

Criei o cursor abaixo, só para tentar pegar o primeiro campo (2912), ou seja até o primeiro espaço. Mas não está pegando nada.
A tabela teste, já existe, com um campo varchar de 100.

DECLARE EXEMPLO CURSOR
local 
forward_only
FOR
		SELECT nome2 from nomes_teste

open exemplo

DECLARE @nome    as CHAR(100)
Declare @Indice  AS int
Declare @VarAcum AS nvarchar(10)

FETCH exemplo INTO @nome -- lê primeira linha do cursor

WHILE @@FETCH_STATUS = 0
  BEGIN
        SET @Indice = 1 -- inicializa o índice com o valor 1
        WHILE @Indice <= Len(@nome) -- enquanto índice menor que o tamanho de @nome.
          BEGIN
		    IF Substring(@nome,@Indice,1) <> ' ' -- Se o caracter da posição for diferente de espaço
  			  BEGIN
				SET @VarAcum = rtrim(Convert(char(100),@VarAcum)) 
							 + rtrim(convert(char(100),Substring(@nome,@Indice,1))) 
				-- adiciona o caracter atual na variável @varAcum
	          END
		    ELSE
			  BEGIN
				SET @indice = Len(@nome) + 1  -- para encerrar o while
				insert into teste values (@VarAcum) -- vai gravar a @varAcum na tabela teste
			  END
		    SET @Indice = @Indice+1 -- soma 1 ao indice
		END
	FETCH NEXT FROM exemplo INTO @nome -- lê próxima linha do cursor
  END

close exemplo
deallocate exemplo

4 Respostas

zoren

a sua query retorna algum resultado??

R

Ela deveria gravar a variável @varAcum na tabela teste. Só que esta tabela fica com NULL no campo nome.

"insert into teste values (@VarAcum) – vai gravar a @varAcum na tabela teste "

zoren

acredito que há um erro de lógica na sua procedure

no if vc seta um valor pra essa variavel e no else vc grava ela no banco,

ao meu ver

ele vai gravar qdo entrar no else valores null, até que passe no if, e qdo entrar ele vai ficar gravando sempre o mesmo valor até entrar novamente

R

Vou verificar.

Mas minha intenção era de mover caracter a caracter do @nome para a var. @varAcum até ele encontrar espaço. Ao encontrar
o espaço, significa que já moveu os caracteres para varAcum e neste momento eu gravaria na tabela.

Criado 7 de novembro de 2009
Ultima resposta 7 de nov. de 2009
Respostas 4
Participantes 2