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