Е, няма TRY_CONVERT() или TRY_CAST() в SQL-Server 2008, но можете да използвате вътрешните преобразувания на XML към nullable типове.
Опитайте това
DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
,('blah') --bad data
SELECT t.*
,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;
Малко хак... Но някак красиво;-)
Малко обяснение
CAST('' AS XML) е просто трик за получаване на истински XML за да използвате собствените методи на XML. sql:column() е XQuery -функция, която ви позволява да включите колона на набор в XQuery (използвайте sql:variable за променливи).
cast as xs:int? ще се опита да анализира низа като int-стойност и ще върне NULL, ако това не работи.
Ограничението е:Това винаги ще използва настройките по подразбиране на вашата система (подобно на TRY_CAST ). С TRY_CONVERT бихте имали повече контрол върху изхода с третия параметър...
Съвет:XQuery/Xpath е строго чувствителен към главни и малки букви. Значи има xs:dateTime? , но ще получите грешка с xs:datetime ...