外側のクエリで数値を使用してもエラーが発生します。
IF OBJECT_ID('tempdb..#TestNumeric') IS NOT NULL
BEGIN
DROP TABLE #TestNumeric
END
CREATE TABLE #TestNumeric (ids INT, Valu NVARCHAR(50))
INSERT INTO #TestNumeric
SELECT 1, '12345' UNION ALL
SELECT 1, '234234 23423' UNION ALL
SELECT 1, '234234'
;WITH CTE
AS
(
SELECT ids, Valu
, Convert(NUMERIC(18,0),Valu) as OriginalNumValue
, ISNUMERIC(Convert(NUMERIC(18,0), Valu) ) IsNumericTrue
FROM #TestNumeric
WHERE ISNUMERIC(Valu) = 1
AND Valu not like '%[^0-9]%'
)
SELECT *
FROM CTE
WHERE Valu = 100
DROP TABLE #TestNumeric
単純に WHERE 条件を削除すると、数値のみが表示されます。エラーが発生し、他の行が読み取られた場合でも。
既にフィルター処理されているため、外部クエリで他の行を読み取るのはなぜですか?