Рекурсия нуждается в завершающем условии. Например
;with tempData as (
select 32 as col1, char(32) as col2
union all
select col1+1, char(col1+1) from tempData
where col1 < 255
)
select * from tempData
option (maxrecursion 223)
Относительно вопроса в заголовке о том, как это работает внутри, см. этот ответ .