I'm running into a really odd error using a SQL Server Common Table Expression (CTE).
I think it is easiest to explain my issue by giving a code example.
CREATE TABLE #Test1 (TestCol varchar(3));
INSERT INTO #Test1 VALUES ('012')
INSERT INTO #Test1 VALUES ('ABC')
--This simple shows the Cast works as expected, and only on rows where the TestCol value is numeric
SELECT TestCol, CAST(TestCol as int) as IntCast
FROM #Test1
WHERE ISNUMERIC(TestCol) = 1;
--Here I create a cte using the same SQL as show above.
with cte as (
SELECT
TestCol, CAST(TestCol as int) as IntCast
FROM #Test1
WHERE ISNUMERIC(TestCol) = 1
)
/*
I have two examples below. The first can be executed to check for the existence of our 'ABC' value. It doesn't show up, which is expected.
The Second example, simple checks to see if our IntCast column is greater than 10. This throws an exception
*/
--SELECT * FROM cte
SELECT * FROM cte WHERE IntCast > 10
DROP TABLE #Test1
The exception here is
Conversion failed when converting the varchar value 'ABC' to data type int
I'm curious as to where this is occurring?