Е, няма 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
...