Podczas konwersji między typami danych w SQL Server natkniesz się na różne funkcje, które pozornie robią to samo. Jednak zazwyczaj istnieją różnice między tymi funkcjami, które mogą nie być widoczne na pierwszy rzut oka. Przykładem tego jest różnica między CAST()
i TRY_CAST()
funkcje.
Ten artykuł pokazuje różnicę między tymi funkcjami podczas korzystania z SQL Server.
Główna różnica między CAST()
i TRY_CAST()
funkcje obsługują dane, których nie można przekonwertować.
Funkcja CAST()
CAST()
funkcja konwertuje wyrażenie jednego typu danych na inny. Pozwala to na takie rzeczy, jak łączenie dwóch wartości różnych typów danych. Tak:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Wynik:
Result ----------- Comments: 9
Działa to dobrze, gdy dane można przekonwertować. Ale co, jeśli danych nie można przekonwertować?
W takim przypadku otrzymasz coś takiego:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Wynik:
Error: Arithmetic overflow error converting numeric to data type varchar.
To w porządku – jeśli SQL Server nie może przekonwertować danych, musisz wiedzieć!
Jest jednak inny sposób, aby to zrobić.
Funkcja TRY_CAST()
TRY_CAST()
funkcja działa jak CAST()
z wyjątkiem tego, że jeśli danych nie można przekonwertować, zwraca null
(zamiast zgłaszania błędu takiego jak CAST()
robi):
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Wynik:
Result ------ null
Może to być przydatne, jeśli chcesz użyć programowania warunkowego, aby aplikacja wykonała inne zadanie w zależności od tego, czy dane mogą zostać przekonwertowane, czy nie.
Przykład:
SELECT CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL THEN 'Cast failed' ELSE 'Cast succeeded' END AS Result;
Wynik:
Result ----------- Cast failed
Nieprawidłowe typy danych
TRY_CAST()
Funkcja działa w ten sposób tylko w przypadku używania prawidłowych typów danych. Otrzymasz więc błąd, jeśli jawnie podasz niedozwolony typ danych.
Przykład:
SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;
Wynik:
Error: Type Miami is not a defined system type.