Problemas com conversão de dados
Galera, estou fazendo uma rotina para calculo do digito do CEI. O grande problema é que não conheço muito da linguagem de script do SQL. A lógica da rotina está correta e já a escrevi totalmente... Quando tento rodar esta dando um problema de conversão numa variável que está simulando um loop FOR...NEXT. Já tentei de tudo mas não consegui resolver, agradeço muito se alguem puder ajudar.
Grande abraço a todos
Segue a rotina
create function dbo.fcValidaCEI(@var_num VarChar(14) = NULL)
returns int
as
begin
declare @var_retorno int
-- Variaveis usadas no calculo
declare @strAux varchar(11),
@numSomat int,
@i int,
@strChar varchar,
@strCharAux varchar,
@numLenumSomat int,
@numAux int,
@numDigit int,
@strSomat int
-- Calcula o digito
set @strAux = ´74185216374´
set @numSomat = 0
set @i = 1
while (@i <= 11)
begin
set @strChar = substring(@var_num,@i,1)
set @strCharAux = substring(@strAux,@i,1)
set @numSomat = @numSomat + (@strChar * @strCharAux)
set @i = @i + 1
end
set @strSomat = @numSomat
set @numLenumSomat = len(@strSomat)
set @numAux = substring(@strSomat,(@numLenumSomat-1),1) + substring(@strSomat,(@numLenumSomat),1)
if (@numAux >= 11) and (@numAux <=18)
begin
set @numDigit = 20 - @numAux
end
else
begin
if (@numAux = 10)
begin
set @numDigit = 1
end
else
begin
set @numDigit = 10 - @numAux
end
end
if (@numDigit = 10)
begin
set @numDigit = 1
end
-- Condição para atender ao SFG. Aceitar o digito informado(0 ou 1), mesmo que o resultado do calculo seja igual a 1
if substring(@var_num,11,1) < ´2´
begin
if (@numDigit = 0) or (@numDigit = 1)
begin
set @numDigit = substring(@var_num,11,1)
set @var_retorno = 2
return(@var_retorno)
end
end
if substring(@var_num,11,1) <> @numDigit
begin
set @var_retorno = 0
return(@var_retorno)
end
set @var_retorno = 2
return(@var_retorno)
end
Grande abraço a todos
Segue a rotina
create function dbo.fcValidaCEI(@var_num VarChar(14) = NULL)
returns int
as
begin
declare @var_retorno int
-- Variaveis usadas no calculo
declare @strAux varchar(11),
@numSomat int,
@i int,
@strChar varchar,
@strCharAux varchar,
@numLenumSomat int,
@numAux int,
@numDigit int,
@strSomat int
-- Calcula o digito
set @strAux = ´74185216374´
set @numSomat = 0
set @i = 1
while (@i <= 11)
begin
set @strChar = substring(@var_num,@i,1)
set @strCharAux = substring(@strAux,@i,1)
set @numSomat = @numSomat + (@strChar * @strCharAux)
set @i = @i + 1
end
set @strSomat = @numSomat
set @numLenumSomat = len(@strSomat)
set @numAux = substring(@strSomat,(@numLenumSomat-1),1) + substring(@strSomat,(@numLenumSomat),1)
if (@numAux >= 11) and (@numAux <=18)
begin
set @numDigit = 20 - @numAux
end
else
begin
if (@numAux = 10)
begin
set @numDigit = 1
end
else
begin
set @numDigit = 10 - @numAux
end
end
if (@numDigit = 10)
begin
set @numDigit = 1
end
-- Condição para atender ao SFG. Aceitar o digito informado(0 ou 1), mesmo que o resultado do calculo seja igual a 1
if substring(@var_num,11,1) < ´2´
begin
if (@numDigit = 0) or (@numDigit = 1)
begin
set @numDigit = substring(@var_num,11,1)
set @var_retorno = 2
return(@var_retorno)
end
end
if substring(@var_num,11,1) <> @numDigit
begin
set @var_retorno = 0
return(@var_retorno)
end
set @var_retorno = 2
return(@var_retorno)
end
Fpinho
Curtidas 0
Respostas
Psergio.p
05/07/2006
Caro amigo, coloca a msg de erro ai que eu te ajudo!
GOSTEI 0