Usuário com melhor resposta
Cursor

Pergunta
-
Boa tarde, eu preciso que incremente o valor do inicio em 1 enquanto for menor q o final. Na minha consulta, o INICIO é 002201 e o final é 002250.
Aí deveria ficar assim:
1 1 002201
1 1 002202
1 1 002203... Sucessivamente até o 002250.
DECLARE @CODCOLIGADA as int,
@CODIGO as int,
@INICIO as varchar(30),
@FINAL as varchar(30)
DECLARE CursorCodigoBarras CURSOR
FOR
select CODCOLIGADA, CODIGO, INICIO, FINAL
from ZMD_LOTEBARRAS
OPEN CursorCodigoBarras
FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL
while @@FETCH_STATUS = 0
BEGIN
while @INICIO < @FINAL
BEGIN
select @CODCOLIGADA CODCOLIGADA, @CODIGO CODIGO, @INICIO + 1
FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL
END
END
CLOSE CursorCodigoBarras
DEALLOCATE CursorCodigoBarras
Respostas
-
Kristen,
Se eu entendi, parece-me que você esta tentando fazer o incremento da variável @Inicio dentro do Cursor na comando Select, mas sem estabelecer uma forma de acumular o valor.
Tente fazer uma pequena alteração para ver se resolve:
DECLARE @CODCOLIGADA as int, @CODIGO as int, @INICIO as varchar(30), @FINAL as varchar(30) DECLARE CursorCodigoBarras CURSOR FOR select CODCOLIGADA, CODIGO, INICIO, FINAL from ZMD_LOTEBARRAS OPEN CursorCodigoBarras FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL while @@FETCH_STATUS = 0 BEGIN while @INICIO < @FINAL BEGIN Set @Inicio = @Inicio + 1 -- Realize o incremento aqui... select @CODCOLIGADA CODCOLIGADA, @CODIGO CODIGO, @INICIO FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL END END CLOSE CursorCodigoBarras DEALLOCATE CursorCodigoBarras
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP sexta-feira, 5 de fevereiro de 2021 19:31
- Marcado como Resposta Kristen Lucena Arruda sábado, 6 de fevereiro de 2021 16:52
Todas as Respostas
-
Kristen,
Se eu entendi, parece-me que você esta tentando fazer o incremento da variável @Inicio dentro do Cursor na comando Select, mas sem estabelecer uma forma de acumular o valor.
Tente fazer uma pequena alteração para ver se resolve:
DECLARE @CODCOLIGADA as int, @CODIGO as int, @INICIO as varchar(30), @FINAL as varchar(30) DECLARE CursorCodigoBarras CURSOR FOR select CODCOLIGADA, CODIGO, INICIO, FINAL from ZMD_LOTEBARRAS OPEN CursorCodigoBarras FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL while @@FETCH_STATUS = 0 BEGIN while @INICIO < @FINAL BEGIN Set @Inicio = @Inicio + 1 -- Realize o incremento aqui... select @CODCOLIGADA CODCOLIGADA, @CODIGO CODIGO, @INICIO FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL END END CLOSE CursorCodigoBarras DEALLOCATE CursorCodigoBarras
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP sexta-feira, 5 de fevereiro de 2021 19:31
- Marcado como Resposta Kristen Lucena Arruda sábado, 6 de fevereiro de 2021 16:52
-
Obrigado pela ajuda, Junior, trouxe os resultados desejados. Mas veio como se fossem consultas separadas e não em uma única apresentação, você sabe como resolver esse causo?
Kristen,
Se eu entendi, parece-me que você esta tentando fazer o incremento da variável @Inicio dentro do Cursor na comando Select, mas sem estabelecer uma forma de acumular o valor.
Tente fazer uma pequena alteração para ver se resolve:
DECLARE @CODCOLIGADA as int, @CODIGO as int, @INICIO as varchar(30), @FINAL as varchar(30) DECLARE CursorCodigoBarras CURSOR FOR select CODCOLIGADA, CODIGO, INICIO, FINAL from ZMD_LOTEBARRAS OPEN CursorCodigoBarras FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL while @@FETCH_STATUS = 0 BEGIN while @INICIO < @FINAL BEGIN Set @Inicio = @Inicio + 1 -- Realize o incremento aqui... select @CODCOLIGADA CODCOLIGADA, @CODIGO CODIGO, @INICIO FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL END END CLOSE CursorCodigoBarras DEALLOCATE CursorCodigoBarras
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Muito obrigado, Junior Galvão!
Consegui resolver a segunda parte do meu problema.
Com a sua resposta, o resultado saía assim:
1 1 2202 (1 rows)
1 1 2203 (1 rows)
1 1 2204 (1 rows)
1 1 2205 (1 rows)
e assim sucessivamente.
Eu precisava que ele apresentasse assim:
1 1 2202
1 1 2203
1 1 2204
1 1 2205 (4 rows). Em uma única tabela e n linhas soltas.
Daí tive que criar uma tabela temporária e funcionou. Segue o código com o resultado em uma única tabela para quem tiver dúvidas relacionadas.
/*
CREATE TABLE #PATRIMONIO
(
CODCOLIGADA int NOT NULL,
CODIGO int NOT NULL,
CODIGOBARRAS INT NOT NULL
)
*/
SELECT * FROM #PATRIMONIO
--Consulta terminada
DECLARE @CODCOLIGADA as int,
@CODIGO as int,
@INICIO as int,
@FINAL as int
DECLARE CursorCodigoBarras CURSOR
FOR
select CODCOLIGADA, CODIGO, INICIO, FINAL
from ZMD_LOTEBARRAS
OPEN CursorCodigoBarras
FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL
while @@FETCH_STATUS = 0
BEGIN
while @INICIO < @FINAL
BEGIN
Set @Inicio = @Inicio + 1
insert into #PATRIMONIO
select @CODCOLIGADA, @CODIGO, @INICIO
FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL
END
END
CLOSE CursorCodigoBarras
DEALLOCATE CursorCodigoBarras
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 9 de fevereiro de 2021 10:41
-
Muito obrigado, Junior Galvão!
Consegui resolver a segunda parte do meu problema.
Com a sua resposta, o resultado saía assim:
1 1 2202 (1 rows)
1 1 2203 (1 rows)
1 1 2204 (1 rows)
1 1 2205 (1 rows)
e assim sucessivamente.
Eu precisava que ele apresentasse assim:
1 1 2202
1 1 2203
1 1 2204
1 1 2205 (4 rows). Em uma única tabela e n linhas soltas.
Daí tive que criar uma tabela temporária e funcionou. Segue o código com o resultado em uma única tabela para quem tiver dúvidas relacionadas.
/*
CREATE TABLE #PATRIMONIO
(
CODCOLIGADA int NOT NULL,
CODIGO int NOT NULL,
CODIGOBARRAS INT NOT NULL
)
*/
SELECT * FROM #PATRIMONIO
--Consulta terminada
DECLARE @CODCOLIGADA as int,
@CODIGO as int,
@INICIO as int,
@FINAL as int
DECLARE CursorCodigoBarras CURSOR
FOR
select CODCOLIGADA, CODIGO, INICIO, FINAL
from ZMD_LOTEBARRAS
OPEN CursorCodigoBarras
FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL
while @@FETCH_STATUS = 0
BEGIN
while @INICIO < @FINAL
BEGIN
Set @Inicio = @Inicio + 1
insert into #PATRIMONIO
select @CODCOLIGADA, @CODIGO, @INICIO
FETCH NEXT FROM CursorCodigoBarras into @CODCOLIGADA, @CODIGO, @INICIO, @FINAL
END
END
CLOSE CursorCodigoBarras
DEALLOCATE CursorCodigoBarras
Kristen,
Que bom, fico feliz, no precisar estamos por aqui.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]