2011-12-21 19 views
9

Errore: errore di overflow aritmetico durante la conversione di valori numerici nel tipo di dati varchar.Errore: errore di overflow aritmetico durante la conversione di valori numerici nel tipo di dati varchar

Errore in questa riga perché e cosa deve essere gestito?

CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4),((CurrentLoans.Price - PreviousLoans.Price)/PreviousLoans.Price) * 100)) 
+0

qualcuno può aiutarmi a identificare ciò che ho bisogno di cambiare :(per favore – Neo

+0

Si prega di postare informazioni migliori la prossima volta.Normalmente si ottiene un numero di riga con l'errore.È anche bello vedere che hai tentato di risolverlo da solo – JNK

+0

Se vuoi che le persone passino il tuo tempo aiutandoti a fare un po 'più di impegno nella domanda: cosa hai provato fino ad ora? Dove cade? Quali sono i valori di input. Ti suggerisco di fare un debugging, guarderei CONVERT (DECIMO (8,4) per i principianti – Simon

risposta

27

Ecco almeno una questione:

CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4))

Il Decimal(8,4) indica 8 cifre numeriche, 4 a destra del decimale. Questo fa NON considerazione per il carattere effettivo decimale, in modo da avere potenzialmente un valore simile:

1234.5678

che è una valida Decimal(8,4) ma non si inserisce in un varchar(8).

+1

quindi cosa deve essere fatto, per favore suggerisci? – Neo

+0

+1: Good Spot. – MatBailie

+0

@ashuthinks - Come utilizzare VARCHAR (9) invece di 9 caratteri ?? – MatBailie

1

So che questo è un vecchio post ma volevo solo dire grazie. Stavo avendo questo problema esatto e ciò che è stato più fastidioso è che ha dato l'errore durante la selezione da una VISTA, ma non ha dato l'errore quando ho usato l'istruzione select da VISTA e l'ho incollato e inserito in una TABELLA TEMP !!

esempio:

select * from dvView --worked 
select * from dvView where product = '5' --Broke! 
--BUT 
select * from #Temp_table_dvView --worked! 
select * from #Temp_table_dvView where product = '5' --worked! 

alla fine, ho dovuto cambiato una parte nella vista dal

select cast(productNumber as nvarchar(1), etc... 

a

select cast(productNumber as nvarchar(2), etc... 

e ha funzionato.

ma strano che l'errore ho ottenuto è stato

Arithmetic overflow error converting numeric to data type varchar. 

al posto di quello che legge

Data would be truncated 

o qualunque cosa ...

spunti di riflessione.

+0

St upid SQL Server! Come può un 'varchar' avere un problema aritmetico ?? – isapir

Problemi correlati