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()
).