SQL number list function

By steve, 8 August, 2019

The following function can be created to dyanmically create a number list in SQL:

CREATE FUNCTION GetNumberList
(
	@Start INt
	,@MaxNum Int
)
RETURNS 
@ret TABLE
(
	Number INT PRIMARY KEY
)
AS
BEGIN
	-- Error if over 131071 due to performance issues (look at creating a permanent numbers table)
	IF @MaxNum > 131071
		INSERT INTO @ret VALUES(CAST('GetNumberList only works up to 131071' AS INT))

	-- Work out how many recursions to do
	DECLARE @Recurse INT = 0;
	IF(@MaxNum > 0)
		SET @Recurse = FLOOR(LOG(@MaxNum,2))
	
	-- Insert the first 2 values
	INSERT INTO @ret VALUES(@Start),(@Start+1)

	WHILE @Recurse > 0
	BEGIN
		INSERT @ret SELECT Number + (SELECT COUNT(Number) FROM @ret) FROM @ret
		SET @Recurse -= 1
	END
	
	DELETE FROM @ret WHERE Number > @Start + @MaxNum

	RETURN 
END
GO

Comments