Ако получавате съобщение за грешка на SQL Server 8114, което гласи нещо като Грешка при преобразуването на типа данни varchar в числов , това вероятно е защото се опитвате да извършите преобразуване на тип данни, което се проваля, тъй като стойността не може да бъде преобразувана към целевия тип.
Това не е, защото не можете да преобразувате този тип в нов тип. Това е заради самата стойност.
Пример за грешка
Ето пример за код, който създава грешката:
SELECT CAST('Ten' AS DECIMAL(5,2));
Резултат:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Тази грешка възникна, защото SQL Server не можа да преобразува стойността на низа в десетична.
Решение 1
За да поправите това, трябва да сте сигурни, че предоставяте стойност, която SQL Server може да преобразува.
Ако предавате колона, проверете дали сте получили правилната колона. Същото, ако предавате променлива – проверете дали е правилната променлива.
Имайте предвид, че това може да не се случи във всички случаи на опит за преобразуване на низ в десетичен, тъй като някои стойности на низове могат да бъдат преобразувани.
Например следното преобразуване е успешно:
SELECT CAST('10' AS DECIMAL(5,2));
Резултат:
10.00
Тук SQL Server успя да изработи това 10
е число и следователно преобразуването е успешно.
Решение 2
Ако нямате нищо против преобразуването е неуспешно, но просто не искате да връща грешка, опитайте TRY_CAST()
или TRY_CONVERT()
функции.
Вместо да връщат грешка, тези функции връщат NULL
когато стойността не може да бъде преобразувана.
Пример:
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));
Резултат:
NULL