none
Cursor RRS feed

  • 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

    sexta-feira, 5 de fevereiro de 2021 18:21

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]


    sexta-feira, 5 de fevereiro de 2021 19:27

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]


    sexta-feira, 5 de fevereiro de 2021 19:27
  • 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]



    sexta-feira, 5 de fevereiro de 2021 20:07
  • 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

    sábado, 6 de fevereiro de 2021 17:01
  • 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]

    terça-feira, 9 de fevereiro de 2021 10:42