Usuário com melhor resposta
erro de conversão " converting varchar to data type numeric."

Pergunta
-
DECLARE @CODCARTAO varchar(20),@SQL varCHAR(2048),@QUERY varchar(2048)
SELECT @CODCARTAO=CODCRT FROM USUARIO
WHERE CODCLI =@CODCLI AND CPF =@CPF AND NUMDEP = 0Erro: 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
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 RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil- Marcado como Resposta Douglas a Fernandes terça-feira, 7 de janeiro de 2014 16:43
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.'
-
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
-
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 RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
-
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
-
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 RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
-
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
-
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 RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil -
-
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 RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil- Marcado como Resposta Douglas a Fernandes terça-feira, 7 de janeiro de 2014 16:43
-