Leider können die SQL Server-Abfrage-Optimierer und Elemente aus Ihrer Abfrage in einer Weise neu anordnen, die Fehler eingeführt werden führen können, dass in der ursprünglichen Abfrage nicht da waren. Dies hängt stark von dem genauen Abfrageplan ab, der verwendet wird, der wiederum nicht nur von der Tabellendefinition und dem Abfragetext abhängt, sondern auch davon, wie Ihre Werte verteilt sind.
In Ihrem Fall ist es möglich, dass SQL Server observ_value >= 190
überprüfen wird, implizit observ_value
zu int
Umwandlung, bevor die observ_value NOT LIKE '%[^0-9]%'
überprüfen. Ob dies eine gültige Neuordnung Ihrer Abfrage ist, ist fraglich, aber selbst wenn sie nicht gültig ist, ist es etwas, was SQL Server tut und etwas, woran Sie arbeiten müssen.
Re-schreiben Sie Ihre Abfrage, um sicherzustellen, keine Umwandlung von nicht-numerischen Werten int
jemals durchgeführt werden:
SELECT
TEMP.observ_value AS value
FROM
(SELECT CASE
WHEN observ_value NOT LIKE '%[^0-9]%'
THEN CONVERT(INT, observ_value) END
AS observ_value
FROM LAB_RESULTS
WHERE observ_value NOT LIKE '%[^0-9]%') TEMP
WHERE
observ_value >= 190
nur FYI, ich die gleiche Abfrage in MSSQL 2012 versucht, es funktioniert. – Guoliang
Beispieldaten anzeigen – Mihai