W SQL Server często używaną funkcją jest CAST() , który przekształca wyrażenie jednego typu danych na inny. Ale jeśli rzutowanie się nie powiedzie, zwróci błąd.
Wpisz TRY_CAST() .
TRY_CAST() funkcja nie zwraca błędu, jeśli rzutowanie się nie powiedzie. Zamiast tego zwraca NULL .
Są jednak sytuacje, w których zwróci błąd.
Składnia
Składnia wygląda tak:
TRY_CAST ( expression AS data_type [ ( length ) ] )
Gdzie expression jest wyrażeniem do konwersji, data_type to nowy typ danych, a length to opcjonalna długość dla nowego typu danych.
Przykład 1 – Cast udaje się
Oto przykład rzutowania łańcucha jako decimal :
SELECT TRY_CAST('007' AS DECIMAL(5,2)); Wynik:
7.00
W tym przypadku obsada się powiodła.
Przykład 2 – Nieudane rzutowanie i zwracanie NULL
Oto przykład niepowodzenia rzutowania i NULL zwracany:
SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2)); Wynik:
NULL
Przesyłanie nie powiodło się, więc NULL został zwrócony.
Dla porównania, oto co się dzieje, gdy używamy CAST() zamiast TRY_CAST() :
SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2)); Wynik:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Przykład 3 – Cast kończy się niepowodzeniem i zwraca błąd
W niektórych przypadkach TRY_CAST() zwróci błąd.
Jeśli rzutowanie jest wyraźnie niedozwolone, zwraca błąd:
SELECT TRY_CAST(10 AS xml); Wynik:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Więcej informacji
Zobacz, jak CAST() Działa w SQL Server, aby uzyskać więcej przykładów konwersji i CAST() vs TRY_CAST() w SQL Server w celu porównania funkcji CAST() i TRY_CAST() .
Zobacz dokumentację Microsoft dla CAST() i CONVERT() aby uzyskać bardziej szczegółowe informacje (większość z nich dotyczy również TRY_CAST() ).