Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Поправете съобщение 8114 „Грешка при преобразуването на тип данни varchar в числово“ в SQL Server

Ако получавате съобщение за грешка на 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да деактивирате всички тригери в базата данни на SQL Server

  2. Как да изключа дните на уикенда в заявка на SQL Server?

  3. Как да промените съпоставянето на база данни на SQL Server с помощта на T-SQL

  4. Какъв е най-добрият начин да тествате програмно връзката със SQL Server?

  5. Съхранена процедура за SQL повикване за всеки ред без използване на курсор