none
while dentro de outro while RRS feed

  • Pergunta

  • Fala pessoal, blz?

    Estou fazendo um script utilizando um while dentro de outro while... o objetivo é recodificar um campo adicionando um sequencial no final desse campo
    atualizando um novo campo que criei, mas o sequencial deve ser reiniciado a cada mudança do codigo.

    depois de executado... vi que nao esta atualizando todos os campos, estou utilizando o script abaixo...o que estou fazendo de errado?

    coloquei o print para ir acompanhando os registros do cursor...

    DECLARE @D04_001_C   CHAR(20)
    DECLARE @D04_008_C   VARCHAR(200)
    DECLARE @UKEY       VARCHAR(20)
    DECLARE @D04_020_C   VARCHAR(50)
    DECLARE @CODIGO     VARCHAR(50)

    declare @contador as int = 1

    DECLARE @CCONTADOR VARCHAR (3)

    DECLARE ITENS CURSOR FOR SELECT  D04_001_C, D04_008_C, UKEY, D04_020_C FROM D04 ORDER BY D04_020_C
    OPEN ITENS

    FETCH NEXT FROM ITENS
    INTO @D04_001_C,@D04_008_C,@UKEY,@D04_020_C

    WHILE @@FETCH_STATUS = 0

    BEGIN

    SET @CODIGO  = @D04_020_C
    PRINT 'CODIGO : ' + @D04_020_C

    WHILE @D04_020_C = @CODIGO and @@FETCH_STATUS = 0
    BEGIN

    SET @CCONTADOR = STR(@contador,3)

    UPDATE D04 SET NOVO_CODIGO = rtrim(ltrim(@d04_020_c)) + '-' + REPLICATE('0',3 - LEN(RTRIM(LTRIM(@CCONTADOR)))) + rtrim(ltrim(@ccontador)) WHERE UKEY = @UKEY

    print rtrim(ltrim(@d04_020_c)) + '-' + REPLICATE('0',3 - LEN(RTRIM(LTRIM(@CCONTADOR)))) + rtrim(ltrim(@ccontador))

    set @contador = @CONTADOR + 1

    FETCH NEXT FROM ITENS
    INTO @D04_001_C,@D04_008_C,@UKEY,@D04_020_C

    END

    set @CONTADOR = 1

    FETCH NEXT FROM ITENS
    INTO @D04_001_C,@D04_008_C,@UKEY,@D04_020_C

    END

    CLOSE ITENS
    DEALLOCATE ITENS

    quarta-feira, 15 de maio de 2013 04:32

Todas as Respostas