none
erro de conversão " converting varchar to data type numeric." RRS feed

  • Pergunta

  • DECLARE @CODCARTAO  varchar(20),@SQL varCHAR(2048),@QUERY varchar(2048)

                        SELECT @CODCARTAO=CODCRT FROM USUARIO
                        WHERE CODCLI =@CODCLI AND CPF =@CPF AND NUMDEP = 0

    Erro: Arithmetic overflow error converting varchar to data type numeric.

    Pessoal boa tarde pq esta dando erro de conversão se o o tipo da variável é igual ao tipo da coluna

    terça-feira, 7 de janeiro de 2014 13:35

Respostas

  • DougAMFM,

    Agora sim você vai usar o CONVERT que te indiquei !

    Segue o trecho do código alterado:

    DECLARE @CODCARTAO  numeric,@MAXPARC VARCHAR(10)
    SET @CODCARTAO = 9876543210
    SET @MAXPARC = '123456'
    
    SET @query = ' UPDATE USUARIO SET MAXPARC = ''' + @MAXPARC + 
    	''' WHERE CODCRT= ' + CONVERT(VARCHAR, @CODCARTAO)
         
    PRINT @QUERY
    --EXEC(@QUERY) 

    E o print-screen de evidência do comando criado.

    Não esqueça de marcar todos os posts que foram úteis para sua solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil

    terça-feira, 7 de janeiro de 2014 16:14
    Moderador

Todas as Respostas

  • Quando eu  coloca para inserir via tabela temporaria igual no exemplo abaixo

         CREATE TABLE #TempTable(
          [CODCARTAO]  VARCHAR(20)
         )
         
         SET @QUERY = ' INSERT INTO #TempTable '+
                        'SELECT CODCRT FROM USUARIO '+
                       ' WHERE CODCLI ='+@CODCLI+' AND CPF='+@CPF+' AND NUMDEP = 0 '
         EXEC(@QUERY)

    da esse erro : 'The conversion of the varchar value '02290117994' overflowed an int column. Maximum integer value exceeded.'

    terça-feira, 7 de janeiro de 2014 13:51
  • Bom dia,

    Qual é o tipo de dados das colunas CODCLI e CPF e das variáveis/parâmetros @CODCLI e @CPF?

    Os valores de @CODCLI  e @CPF estão sendo configurados antes de executar a query?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 7 de janeiro de 2014 13:52
  • DougAmFm,

    Este erro ocorre porque você está tentando inserir um valor do tipo numeric em uma variável do tipo varchar. 

    Para executar esta sua tarefa, execute a consulta como no exemplo abaixo:

    DECLARE @CODCARTAO  numeric,
    @CODCLI numeric,
    @CPF varchar(15)
    
    SET @CODCLI = 1
    SET @CPF = '99999999999'
    
    SELECT @CODCARTAO = CODCRT FROM USUARIO 
    WHERE CODCLI = @CODCLI AND CPF = @CPF AND NUMDEP = 0

    Se esta resposta foi útil, não esqueça de marcar como resposta.

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 7 de janeiro de 2014 13:55
    Moderador
  • Durval mais o campo é varchar(20)
    terça-feira, 7 de janeiro de 2014 14:05
  • Olá,

         Pode ser que sejam dois problemas diferentes, mas em principio o erro acima é porque você está excedendo o tamanho máximo que o campo CPF aceita. O campo CPF é do tipo INT que aceita no máximo o número 2147483647 e o valor que você está tentando gravar nele é 2290117994, ou seja, maior que o tipo INT aceita. Mude o seu campo CPF para BIGINT que resolverá esse problema. Provavelmente você também solucionará o problema da primeira query.

        


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    terça-feira, 7 de janeiro de 2014 14:18
    Moderador
  • DougAmFm,

    Então verifique o exemplo abaixo, onde existe um CONVERT na variável CODCLI. O seu problema está em uma das variáveis: @CODCLI, @CPF ou @CODCARTAO. 

    SET @QUERY = ' INSERT INTO #TempTable '+ 
    'SELECT CODCRT FROM USUARIO '+
    ' WHERE CODCLI ='+ CONVERT(VARCHAR, @CODCLI) + 
    ' AND CPF='+@CPF+' AND NUMDEP = 0 '
    
    EXEC(@QUERY)
    

    Se resolver seu problema, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    terça-feira, 7 de janeiro de 2014 14:31
    Moderador
  • Durval  mais todas as minhas variáveis estão declaradas como varchar
    terça-feira, 7 de janeiro de 2014 15:29
  • Essa aqui é minha procedure, todos os campos são varchar

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go


    /*----------------------------------------------------------------------------*/      
    /* PROC_RECUPERAEMAIL                                                         */        
    /*                                                                            */        
    /*                                                                            */        
    /*                                                                            */
    /*                                                                            */  
    /*   @SISTEMA ->  Sistema 0 = PJ (Pós-pago)                                   */        
    /*                        1 = VA (Pré-pago)                                   */        
    /*                                                                            */      
    /*----------------------------------------------------------------------------*/   
    ALTER PROCEDURE PROC_ALTMAXPARC
    @SISTEMA INT =0, @CODCLI VARCHAR(5),@CPF VARCHAR(11),@MAXPARC VARCHAR(10),@BANCOAUTORIZADOR VARCHAR(20)

    AS
    BEGIN TRY
     IF @SISTEMA = 0
         BEGIN
         DECLARE @CODCARTAO  numeric,@SQL VARCHAR(2048),@QUERY varchar(2048)
         
         CREATE TABLE #TempTable(
          [CODCARTAO]  numeric
         )
         
         SET @QUERY = ' INSERT INTO #TempTable '+
                      ' SELECT CODCRT FROM USUARIO '+
                      ' WHERE CODCLI ='+@CODCLI+' AND CPF='+@CPF+' AND NUMDEP = 0 '
         EXEC(@QUERY)
         SELECT @CODCARTAO = CODCARTAO FROM #TempTable
         DROP TABLE #TempTable

         IF @CODCARTAO is not null
            BEGIN
            BEGIN TRAN
            SET @SQL = ' UPDATE USUARIO SET MAXPARC = ' + @MAXPARC +
                       ' WHERE CODCRT='+@CODCARTAO
            
            EXEC(@SQL)
            SET @SQL = ' UPDATE '+@BANCOAUTORIZADOR+'.dbo.CTCARTAO SET MAXPARC = ' + @MAXPARC +
                       ' WHERE CODCARTAO='+@CODCARTAO
            EXEC(@SQL)

            IF @@TRANCOUNT > 0
               COMMIT TRANSACTION
         END
         ELSE
            SELECT 'Cartão não existe.' AS Retorno

     END
     ELSE
        SELECT ' busca de email para o Sistema VA não implementado ' AS Retorno  
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION
        SELECT
        'Erro na PROC_ALTMAXPARC' AS Retorno,
        ERROR_MESSAGE()   AS MensagemdeErro,
        ERROR_LINE()      AS LinhadoErro,
        ERROR_NUMBER()    AS NúmeroErro

    END CATCH

    terça-feira, 7 de janeiro de 2014 15:32
  • DougAmFM,

    Esta mais claro, vamos tentar executar um teste com parte da sua consulta dinâmica:

    declare @query varchar (200),
    @CODCLI varchar(25),
    @CPF varchar(15)
    
    SET @CODCLI = 123423554354
    SET @CPF = '8756234923234'
    
    SET @QUERY = ' INSERT INTO #TempTable '+ 
                      ' SELECT CODCRT FROM USUARIO '+
                      ' WHERE CODCLI ='+@CODCLI+' AND CPF='''+@CPF+''' AND NUMDEP = 0 '
    
    PRINT @QUERY
    --EXEC(@QUERY) 
    

    Modifiquei a estrutura do CPF. Veja o resultado no print-screen abaixo:

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil

    terça-feira, 7 de janeiro de 2014 15:41
    Moderador
  • Durval o erro me parece que esta dando no CODCRT
    terça-feira, 7 de janeiro de 2014 16:03
  • DougAMFM,

    Agora sim você vai usar o CONVERT que te indiquei !

    Segue o trecho do código alterado:

    DECLARE @CODCARTAO  numeric,@MAXPARC VARCHAR(10)
    SET @CODCARTAO = 9876543210
    SET @MAXPARC = '123456'
    
    SET @query = ' UPDATE USUARIO SET MAXPARC = ''' + @MAXPARC + 
    	''' WHERE CODCRT= ' + CONVERT(VARCHAR, @CODCARTAO)
         
    PRINT @QUERY
    --EXEC(@QUERY) 

    E o print-screen de evidência do comando criado.

    Não esqueça de marcar todos os posts que foram úteis para sua solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil

    terça-feira, 7 de janeiro de 2014 16:14
    Moderador
  • deixa eu testar aqui
    terça-feira, 7 de janeiro de 2014 16:20