In Bezug auf Ihre Nachdenklichkeit.
SQL Server 2012 führt TRY_CONVERT
ein
für dieses Bedürfnis. Die folgende Abfrage würde also NULL
zurückgeben eher ein Fehler.
SELECT TRY_CONVERT ( FLOAT, 'Fish')
Auch bei seriellen Plänen gibt es keine Garantie, dass der WHERE
-Klausel wird vor dem SELECT
vorkommen ausgewertet wird. Wie erklärt in diesem Blogbeitrag
Ab SQL Server 2005 tritt dies häufiger auf als in früheren Versionen. Die Verhaltensänderungen an Datenbankmodulfunktionen in SQL Server 2005
ruft dies speziell wie folgt auf.
Weitere Diskussionen zu diesem Verhalten finden Sie in einem anderen guten Blogbeitrag von Craig Freedman Konvertierungs- und Rechenfehler .
Auf Versionen vor 2012 und TRY_CONVERT
Sie müssen CAST AS FLOAT
umschließen in einem CASE
Aussage. z. B.
SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
FROM Table
WHERE ISNUMERIC(Col)=1
Dies ist immer noch nicht absolut sicher, dass Sie Fehler als ISNUMERIC
erhalten selbst überprüft nur, ob der Wert in einen der numerischen Datentypen umgewandelt wird und nicht speziell in Float Ein Beispiel für eine fehlschlagende Eingabe ist '.'
CASE
ist in Online-Büchern als meist kurzgeschlossen dokumentiert (einige Ausnahmen werden hier diskutiert
). )
Weitere Diskussionen/Beschwerden dazu finden Sie auch im Connect-Element SQL Server sollte keine unlogischen Fehler auslösen und ein gute Erklärung eines ähnlichen Problems von SQLKiwi