TRY_CAST próbuje przekonwertować wartość na wskazany typ, zwracając NULL zamiast błędu przy niepowodzeniu.
TRY_CAST w języku Transact-SQL
TRY_CAST to funkcja dostępna w aparacie Transact-SQL używanym przez Microsoft SQL Server. Jej zadaniem jest próba przekonwertowania wyrażenia na wskazany typ danych. Składnia ma postać TRY_CAST ( expression AS data_type [ ( length ) ] ). Argument expression może być między innymi nazwą kolumny, stałą, parametrem procedury albo innym wyrażeniem zwracającym wartość. Po słowie AS podaje się typ docelowy, na przykład int, decimal(10,2), date, datetime2 lub varchar(20).
Jeżeli konwersja jest możliwa, TRY_CAST zwraca wartość w określonym typie. Gdy zawartość nie pasuje do tego typu, funkcja zwraca NULL zamiast przerywać wykonanie zapytania błędem konwersji. Przykładowo wyrażenie TRY_CAST('123' AS int) zwróci liczbę całkowitą 123, natomiast TRY_CAST('abc' AS int) zwróci NULL. Funkcja nie zmienia danych zapisanych w tabeli; oblicza wartość w ramach konkretnego wyrażenia, zapytania, widoku, procedury lub instrukcji modyfikującej dane.
Różnica między TRY_CAST a zwykłym CAST
Podstawowa różnica dotyczy zachowania przy nieprawidłowej wartości. CAST('abc' AS int) powoduje błąd konwersji i może zatrzymać wykonanie całej instrukcji, zależnie od miejsca użycia oraz kontekstu transakcji. TRY_CAST('abc' AS int) zwraca NULL, dzięki czemu zapytanie może przetworzyć także pozostałe wiersze. Jest to szczególnie istotne podczas odczytu danych importowanych z plików tekstowych, formularzy lub starszych systemów, w których jedna kolumna może zawierać zarówno poprawne wartości, jak i wpisy puste albo błędne.
Wynik NULL oznacza jednak utratę informacji o przyczynie niepowodzenia. Z samego wyniku nie da się rozróżnić, czy tekst zawierał litery zamiast cyfr, nieprawidłowy format daty, liczbę przekraczającą zakres typu, czy też wartość była już wcześniej pusta. Dlatego przy kontroli jakości danych często warto zachować oryginalną kolumnę i obliczyć dodatkowe pola, na przykład przekonwertowaną wartość oraz znacznik wskazujący, że tekst niepusty dał wynik NULL. Samo użycie TRY_CAST nie naprawia źródłowych danych i nie zastępuje sprawdzenia ich formatu.
Daty, liczby i wartości NULL w praktyce
TRY_CAST stosuje reguły konwersji Microsoft SQL Server, dlatego wynik może zależeć od typu docelowego oraz ustawień interpretacji dat obowiązujących dla sesji. Tekst przedstawiający datę powinien mieć format jednoznaczny dla używanego środowiska. W przeciwnym razie ta sama wartość może zostać poprawnie przekonwertowana w jednej sesji, a w innej zwrócić NULL albo zostać zinterpretowana jako inny dzień i miesiąc. Przy danych liczbowych trzeba dodatkowo uwzględnić zakres i dokładność typu, na przykład ograniczenia int oraz skalę typu decimal.
Jeżeli argument expression ma wartość NULL, wynik TRY_CAST również jest wartością NULL. To zachowanie nie oznacza błędu, lecz zachowanie pustej wartości podczas konwersji. Funkcję można łączyć z IS NULL, IS NOT NULL, COALESCE lub warunkiem WHERE. Przykładowo filtr z warunkiem TRY_CAST(kolumna AS int) IS NOT NULL wybierze wartości możliwe do odczytania jako liczby całkowite, ale może również pominąć prawidłowo puste pola, ponieważ NULL nie jest liczbą. Trzeba pamiętać, że konwersje między niektórymi typami są jawnie niedozwolone i w takich sytuacjach TRY_CAST nadal może zgłosić błąd zamiast zwrócić NULL.
Kontrola danych przed zapisem i dalszą diagnostyką
W zapytaniach SQL Server TRY_CAST może służyć do bezpiecznego wykrywania rekordów wymagających weryfikacji. Oryginalny tekst pozostaje dostępny, a wynik konwersji można wykorzystać do sortowania, porównywania, agregowania lub warunkowego zapisu. Przed zastosowaniem takiego rozwiązania należy sprawdzić, czy NULL jest dopuszczalny w kolumnie docelowej. Jeżeli kolumna ma ograniczenie NOT NULL, próba zapisania nieudanej konwersji zakończy się błędem zapisu, mimo że sama funkcja TRY_CAST zadziałała zgodnie z przeznaczeniem. Należy też pamiętać o ograniczeniach dotyczących bardzo długich wartości: w SQL Server TRY_CAST nie obsługuje wyrażeń varchar(max) dłuższych niż 8000 bajtów ani nvarchar(max) dłuższych niż 4000 znaków.
Problemy z zapytaniem wykorzystującym TRY_CAST mogą wynikać z błędnego typu docelowego, niespójnego formatu danych, ustawień sesji albo nieprawidłowego schematu tabeli, a nie z awarii komputera użytkownika. Diagnostyka powinna obejmować treść zapytania, definicję kolumn, przykładowe wartości wejściowe oraz komunikaty SQL Server. Przy pracy na laptopie lub komputerze PC można dodatkowo sprawdzić połączenie z używanym narzędziem bazodanowym, sterownik i konfigurację aplikacji, ale sama funkcja jest wykonywana po stronie silnika SQL Server. W przypadku środowisk komputerowych Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów; analiza semantyki zapytań TRY_CAST pozostaje zadaniem związanym z konkretną konfiguracją oraz administracją silnika bazy danych.