Welnu, er is geen TRY_CONVERT() of TRY_CAST() in SQL-Server 2008, maar u kunt de interne casts van XML naar nullable-typen gebruiken.
Probeer dit
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;
Beetje een hack... Maar op de een of andere manier mooi;-)
Enige uitleg
De CAST('' AS XML) is gewoon een truc om een echte XML te krijgen om gebruik te maken van de native methoden van XML. De sql:column() is een XQuery -functie, waarmee u de kolom van een set kunt opnemen in de XQuery (gebruik sql:variable voor variabelen).
De cast as xs:int? zal proberen de string te ontleden als int-waarde en zal NULL teruggeven als dit niet werkt.
De limiet is:dit gebruikt altijd de standaardinstellingen van uw systeem (vergelijkbaar met TRY_CAST ). Met TRY_CONVERT je zou meer controle hebben over de output met de derde parameter...
Hint:XQuery/Xpath is strikt hoofdlettergevoelig. Dus er is xs:dateTime? , maar je krijgt een foutmelding met xs:datetime ...