Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal
Estou tentando resolver esse problema, mas não estou conseguindo ver o erro. A query pega 1 registro ao invés de pegar um a cada registro cnpj verificado, e ainda ela fica num loopen infinito rodando apenas um registro.
Segue abaixo a query.
set nocount on
declare @INDICE INT,
@SOMA INT,
@DIG1 INT,
@DIG2 INT,
@cnpj VARCHAR(14),
@TESTE VARCHAR(14),
@DIGITOS_IGUAIS CHAR(1),
@RESULTADO CHAR(1)
SET @RESULTADO = 'N'
SET @TESTE = SUBSTRING(@cnpj,1,1)
SET @INDICE = 1
SET @DIGITOS_IGUAIS = 'S'
SELECT @cnpj = CNPJ FROM PJNOVO
WHERE Cnpj_Valido IS NULL
while LEN(@cnpj) > 0
begin
SET @RESULTADO = 'N'
SET @TESTE = SUBSTRING(@cnpj,1,1)
SET @INDICE = 1
SET @DIGITOS_IGUAIS = 'S'
WHILE (@INDICE <= 14)
BEGIN
IF SUBSTRING(@cnpj,@INDICE,1) <> @TESTE
SET @DIGITOS_IGUAIS = 'N'
SET @INDICE = @INDICE + 1
END
--Caso os digitos não sejão todos iguais Começo o calculo do digitos
IF @DIGITOS_IGUAIS = 'N'
BEGIN
--Cálculo do 1º dígito
SET @SOMA = 0
SET @INDICE = 1
WHILE (@INDICE <= 12)
BEGIN
IF (@INDICE <= 4) BEGIN
SET @SOMA = @SOMA + CAST(SUBSTRING(@cnpj, @INDICE, 1)AS INT) * (6 - @INDICE);
SET @INDICE = @INDICE + 1
END
ELSE IF (@INDICE > 4) BEGIN
SET @SOMA = @SOMA + CAST(SUBSTRING(@cnpj, @INDICE, 1)AS INT ) * (14 - @INDICE);
SET @INDICE = @INDICE + 1
END
END
SET @DIG1 = 11 - (@SOMA % 11)
IF @DIG1 > 9
SET @DIG1 = 0;
-- Cálculo do 2º dígito }
SET @SOMA = 0
SET @INDICE = 1
SELECT top 1 @cnpj = cnpj FROM PJNOVO where cnpj = @cnpj --and uf = @uf
order by 1
WHILE (@INDICE <= 13)
BEGIN
IF (@INDICE <= 5) BEGIN
SET @SOMA = @SOMA + CAST(SUBSTRING(@cnpj, @INDICE, 1)AS INT) * (7 - @INDICE);
SET @INDICE = @INDICE + 1
END
ELSE IF (@INDICE > 5) BEGIN
SET @SOMA = @SOMA + CAST(SUBSTRING(@cnpj, @INDICE, 1)AS INT) * (15 - @INDICE);
SET @INDICE = @INDICE + 1
END
END
SET @DIG2 = 11 - (@SOMA % 11)
IF @DIG2 > 9
SET @DIG2 = 0
-- Validando
IF (@DIG1 = SUBSTRING(@cnpj,LEN(@cnpj)-1,1)) AND (@DIG2 = SUBSTRING(@cnpj,LEN(@cnpj),1))
SET @RESULTADO = 'S'
ELSE
SET @RESULTADO = 'N'
END
UPDATE PJNOVO
SET Cnpj_Valido = @RESULTADO
where cnpj = @cnpjSET NOCOUNT OFF
Espero que alguem possa me ajudar, um abraço a todos e um bom final de semana
inforthiago
Carregando comentários...