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 ...