Проблема вашего запроса заключается в том, что и якорная, и рекурсивная части запроса должны иметь одинаковое количество столбцов (и идентичные типы данных). Ваш якорь имеет только один столбец (numberMin
), а рекурсивная часть имеет 4 столбца, поэтому ошибки запроса.
Обратите внимание:
with numcte as (
select id, name, numberMin, numberMax, numberMin newcol from mytable
union all
select id, name, numberMin, numberMax, newcol + 1
from numcte
where newcol < numberMax - 1
)
select * from numcte
Условие where
предотвращает последнее значение newcol
для фактического достижения numberMax
- это немного необычно, но это то, что показывает желаемый результат.
Обратите внимание, что SQL Сервер по умолчанию ограничивает количество итераций рекурсивного запроса до 100. Если вам нужно обработать больше, вам нужно добавить option (maxrecursion 0)
в конце запроса.