Bueno, no hay TRY_CONVERT() o TRY_CAST() en SQL-Server 2008, pero puede usar conversiones internas de XML para tipos anulables.
Prueba esto
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;
Un truco... pero de alguna manera hermoso;-)
Alguna explicación
El CAST('' AS XML) es solo un truco para obtener un XML real para poder utilizar los métodos nativos de XML. El sql:column() es una XQuery -función, que le permite incluir la columna de un conjunto en el XQuery (use sql:variable para variables).
El cast as xs:int? intentará analizar la cadena como valor int y devolverá NULL si esto no funciona.
El límite es:Esto siempre usará los valores predeterminados de su sistema (similar a TRY_CAST ). Con TRY_CONVERT tendrías más control sobre la salida con el tercer parámetro...
Pista:XQuery/Xpath es estrictamente sensible a mayúsculas y minúsculas. Entonces hay xs:dateTime? , pero obtendrá un error con xs:datetime ...