Nun, es gibt kein TRY_CONVERT() oder TRY_CAST() in SQL-Server 2008, aber Sie können die internen Umwandlungen von XML in nullfähige Typen verwenden.
Versuchen Sie dies
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;
Etwas abgedroschen... Aber irgendwie schön;-)
Einige Erklärung
Der CAST('' AS XML) ist nur ein Trick, um ein echtes XML zu bekommen um die nativen Methoden von XML zu nutzen. Die sql:column() ist eine XQuery -Funktion, mit der Sie die Spalte eines Satzes in die XQuery aufnehmen können (verwenden Sie sql:variable für Variablen).
Der cast as xs:int? versucht, den String als int-Wert zu parsen und gibt NULL zurück, wenn dies nicht funktioniert.
Das Limit ist:Dies wird immer die Standardeinstellungen Ihres Systems verwenden (ähnlich wie TRY_CAST ). Mit TRY_CONVERT Mit dem dritten Parameter hätten Sie mehr Kontrolle über die Ausgabe...
Hinweis:XQuery/Xpath Groß- und Kleinschreibung wird strikt beachtet. Es gibt also xs:dateTime? , aber Sie würden einen Fehler mit xs:datetime erhalten ...