Beim Konvertieren zwischen Datentypen in SQL Server werden Sie auf verschiedene Funktionen stoßen, die scheinbar dasselbe tun. Allerdings gibt es zwischen diesen Funktionen meist Unterschiede, die auf den ersten Blick nicht erkennbar sind. Ein Beispiel dafür ist der Unterschied zwischen CAST()
und TRY_CAST()
Funktionen.
Dieser Artikel demonstriert den Unterschied zwischen diesen Funktionen bei der Verwendung von SQL Server.
Der Hauptunterschied zwischen CAST()
und TRY_CAST()
Funktionen liegt in der Art und Weise, wie sie mit Daten umgehen, die nicht konvertiert werden können.
Die CAST()-Funktion
Der CAST()
Funktion konvertiert einen Ausdruck eines Datentyps in einen anderen. Dadurch können Sie beispielsweise zwei Werte unterschiedlicher Datentypen verketten. So:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Ergebnis:
Result ----------- Comments: 9
Dies funktioniert gut, wenn die Daten konvertiert werden können. Was aber, wenn die Daten nicht konvertiert werden können?
In diesem Fall erhalten Sie etwa Folgendes:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Ergebnis:
Error: Arithmetic overflow error converting numeric to data type varchar.
Das ist fair genug – wenn SQL Server die Daten nicht konvertieren kann, müssen Sie es wissen!
Es gibt jedoch einen anderen Weg, dies zu tun.
Die TRY_CAST()-Funktion
Der TRY_CAST()
Funktion funktioniert genauso wie CAST()
außer dass, wenn die Daten nicht konvertiert werden können, null
zurückgegeben wird (anstatt einen Fehler wie CAST()
auszulösen tut):
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Ergebnis:
Result ------ null
Dies kann praktisch sein, wenn Sie bedingte Programmierung verwenden möchten, damit die Anwendung eine andere Aufgabe ausführt, je nachdem, ob die Daten konvertiert werden können oder nicht.
Beispiel:
SELECT CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL THEN 'Cast failed' ELSE 'Cast succeeded' END AS Result;
Ergebnis:
Result ----------- Cast failed
Ungültige Datentypen
Der TRY_CAST()
Die Funktion funktioniert nur auf diese Weise, wenn gültige Datentypen verwendet werden. Sie erhalten also eine Fehlermeldung, wenn Sie explizit einen nicht zulässigen Datentyp angeben.
Beispiel:
SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;
Ergebnis:
Error: Type Miami is not a defined system type.