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