Tja, det finns ingen TRY_CONVERT() eller TRY_CAST() i SQL-Server 2008, men du kan använda XMLs interna casts till nullbara typer.
Prova detta
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;
Lite av ett hack... Men på något sätt vackert;-)
Någon förklaring
CAST('' AS XML) är bara ett knep för att få en riktig XML för att få användning av XMLs infödda metoder. sql:column() är en XQuery -funktion, som låter dig inkludera en uppsättnings kolumn i XQuery (använd sql:variable för variabler).
cast as xs:int? kommer att försöka analysera strängen som int-värde och returnerar NULL om detta inte fungerar.
Gränsen är:Detta kommer alltid att använda ditt systems standardvärden (liknande TRY_CAST ). Med TRY_CONVERT du skulle ha mer kontroll över utgången med den tredje parametern...
Tips:XQuery/Xpath är strikt skiftlägeskänslig. Så det finns xs:dateTime? , men du skulle få ett felmeddelande med xs:datetime ...