В SQL Server често използвана функция е CAST() , който преобразува израз от един тип данни в друг. Но ако прехвърлянето не успее, то връща грешка.
Въведете TRY_CAST() .
TRY_CAST() функцията не връща грешка, ако прехвърлянето е неуспешно. Вместо това връща NULL .
Има обаче някои случаи, когато ще върне грешка.
Синтаксис
Синтаксисът е така:
TRY_CAST ( expression AS data_type [ ( length ) ] )
Където expression е изразът за преобразуване, data_type е новият тип данни и length е незадължителна дължина за новия тип данни.
Пример 1 – Прехвърлянето е успешно
Ето пример за прехвърляне на низ като decimal :
SELECT TRY_CAST('007' AS DECIMAL(5,2)); Резултат:
7.00
В този случай актьорският състав успя.
Пример 2 – Прехвърлянето е неуспешно и връща NULL
Ето пример за неуспешно прехвърляне и NULL се връща:
SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2)); Резултат:
NULL
Прехвърлянето е неуспешно и така NULL беше върнат.
За сравнение, ето какво се случва, когато използваме CAST() вместо TRY_CAST() :
SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2)); Резултат:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Пример 3 – Прехвърлянето е неуспешно и връща грешка
Има някои случаи, когато TRY_CAST() ще върне грешка.
Ако прехвърлянето не е изрично разрешено, то връща грешка:
SELECT TRY_CAST(10 AS xml); Резултат:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Повече информация
Вижте как CAST() Работи в SQL Server за повече примери за преобразуване и CAST() срещу TRY_CAST() в SQL Server за сравнение между CAST() и TRY_CAST() .
Вижте документацията на Microsoft за CAST() и CONVERT() за по-подробна информация (повечето от нея се отнася и за TRY_CAST() ).