SQLで素数生成

素数生成が遅いのと、上限を定めないと行けないのがいまいち気に入りません。
もっと良い方法があればよいけれども・・・

WITH temp(p)
AS
(
	SELECT 2
UNION ALL
	SELECT (CASE t.p WHEN 2 THEN 3 ELSE t.p + 2 END)
	FROM temp t
	WHERE (t.p + 2) <= 100000
)
SELECT
	p
	, ROW_NUMBER() OVER(ORDER BY p)
--INTO #primes
FROM temp m
WHERE
	NOT EXISTS (
		SELECT 1
		FROM temp s
		WHERE
			s.p < m.p
			AND m.p % s.p = 0)
OPTION (MAXRECURSION 0)