No, neexistuje žádný TRY_CONVERT() nebo TRY_CAST() v SQL-Server 2008, ale můžete použít interní přetypování XML na typy s možnou hodnotou Null.
Zkuste toto
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;
Trochu hack... Ale nějak krásně;-)
Nějaké vysvětlení
CAST('' AS XML) je jen trik, jak získat skutečný XML za účelem využití nativních metod XML. sql:column() je XQuery -funkce, která umožňuje zahrnout sloupec sady do XQuery (použijte sql:variable pro proměnné).
cast as xs:int? se pokusí analyzovat řetězec jako int-value a vrátí NULL, pokud to nebude fungovat.
Limit je:Toto bude vždy používat výchozí nastavení vašeho systému (podobně jako TRY_CAST ). Pomocí TRY_CONVERT budete mít větší kontrolu nad výstupem s třetím parametrem...
Nápověda:XQuery/Xpath přísně rozlišuje velká a malá písmena. Existuje tedy xs:dateTime? , ale zobrazí se chyba s xs:datetime ...