Я не уверен, что это лучший способ сделать это, но он отвечает на главный вопрос об автоматическом создании таблицы:
WITH myValueTable AS (
SELECT 1 AS 'val'
UNION ALL
SELECT val + 1 FROM myValueTable WHERE val < 1000
)
SELECT * FROM myValueTable OPTION (MAXRECURSION 1000)
... который вернет таблицу из одного столбца со значениями от 1 до 1000. Однако, если вы собираетесь делать это регулярно, будет быстрее (для всего запроса) создать статическую таблицу. Если вы можете закрепить значения до заданного диапазона, например, начиная с 124 и сгенерировать следующие 10, это будет улучшением.
Но, не зная больше о запросе, трудно понять, является ли это лучшим решением для вас с имеющейся работой. Если вы можете предоставить пример данных о том, что у вас есть и что вы хотите получить, это поможет.
Изменить ...
Если вы пытаетесь найти «пробел» в наборе чисел, вы можете попробовать:
WITH mycte AS (
SELECT product.id, ROW_NUMBER() OVER (ORDER BY product.id) AS 'rownum' FROM product
UNION
SELECT MAX(product.id), MAX(product.id) + 1 FROM product
)
SELECT MIN(rownum) FROM mycte WHERE rownum <> id
... опять же не может гарантировать производительность, но может дать вам идеи для игры.