Cóż, nie ma TRY_CONVERT() lub TRY_CAST() w SQL-Server 2008, ale możesz użyć wewnętrznych rzutowań XML na typy dopuszczające wartość null.
Wypróbuj to
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;
Trochę hack... Ale jakoś pięknie;-)
Niektóre wyjaśnienia
CAST('' AS XML) to tylko sztuczka, aby uzyskać prawdziwy XML w celu skorzystania z natywnych metod XML. sql:column() jest XQuery -funkcja, która pozwala na dołączenie kolumny zestawu do XQuery (użyj sql:variable dla zmiennych).
cast as xs:int? spróbuje przeanalizować ciąg jako wartość typu int i zwróci NULL, jeśli to nie zadziała.
Limit jest następujący:to zawsze użyje ustawień domyślnych twojego systemu (podobnie do TRY_CAST ). Z TRY_CONVERT miałbyś większą kontrolę nad wyjściem z trzecim parametrem...
Podpowiedź:XQuery/Xpath jest ściśle rozróżniana wielkość liter. Więc jest xs:dateTime? , ale otrzymasz błąd z xs:datetime ...