Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Napraw komunikat 8114 „Błąd konwersji typu danych varchar na numeryczny” w SQL Server

Jeśli otrzymujesz komunikat o błędzie SQL Server 8114, który brzmi jak Błąd podczas konwersji typu danych varchar na numeryczny , prawdopodobnie dlatego, że próbujesz przeprowadzić konwersję typu danych, która kończy się niepowodzeniem z powodu niemożności przekonwertowania wartości na typ docelowy.

Nie dzieje się tak dlatego, że nie możesz przekonwertować tego typu na nowy typ. Dzieje się tak z powodu samej wartości.

Przykład błędu

Oto przykład kodu, który generuje błąd:

SELECT CAST('Ten' AS DECIMAL(5,2));

Wynik:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Ten błąd wystąpił, ponieważ SQL Server nie mógł przekonwertować wartości ciągu na dziesiętną.

Rozwiązanie 1

Aby to naprawić, musisz upewnić się, że podajesz wartość, którą SQL Server może przekonwertować.

Jeśli przekazujesz kolumnę, sprawdź, czy masz właściwą kolumnę. To samo, jeśli przekazujesz zmienną – sprawdź, czy jest to właściwa zmienna.

Pamiętaj, że może się to nie zdarzyć we wszystkich przypadkach, gdy próbujesz przekonwertować ciąg na dziesiętny, ponieważ niektóre wartości ciągu można przekonwertować.

Na przykład następująca konwersja powiodła się:

SELECT CAST('10' AS DECIMAL(5,2));

Wynik:

10.00

Tutaj SQL Server był w stanie wyliczyć, że 10 jest liczbą, dlatego konwersja powiodła się.

Rozwiązanie 2

Jeśli nie masz nic przeciwko nieudanej konwersji, ale po prostu nie chcesz, aby zwracała błąd, wypróbuj TRY_CAST() lub TRY_CONVERT() funkcje.

Zamiast zwracać błąd, te funkcje zwracają NULL gdy wartość nie może zostać przeliczona.

Przykład:

SELECT TRY_CAST('Ten' AS DECIMAL(5,2));

Wynik:

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. Instrukcja SQL GROUP BY CASE z funkcją agregującą

  2. Uzyskaj informacje o widoku za pomocą widoku schematu informacji WIDOKÓW w SQL Server

  3. Jak w programie SQL Server wygenerować instrukcję CREATE TABLE dla danej tabeli?

  4. Jak przekazać wartość do parametru procedury składowanej w składniku źródłowym OLE DB?

  5. TSQL Try / Catch w ramach transakcji lub odwrotnie?