, ...
...
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b),
E4(N) AS (SELECT 1 FROM E2 a, E2 b),
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
select N from cteTally
,
CREATE FUNCTION [dbo].[fnTallyProg]
(
@pStart BIGINT
,@pEnd BIGINT
,@pIncrement BIGINT
)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN WITH
E01(N) AS (SELECT NULL FROM (VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))E0(N))
,E04(N) AS (SELECT NULL FROM E01 a CROSS JOIN E01 b CROSS JOIN E01 c CROSS JOIN E01 d)
,E16(N) AS (SELECT NULL FROM E04 a CROSS JOIN E04 b CROSS JOIN E04 c CROSS JOIN E04 d)
,Tally(N) AS (SELECT TOP (ABS((@pEnd-@pStart+@pIncrement)/@pIncrement))
N = ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM E16
WHERE (@pStart<=@pEnd AND @pIncrement > 0)
OR (@pStart>=@pEnd AND @pIncrement < 0)
ORDER BY N
)
SELECT TOP (ABS((@pEnd-@pStart+@pIncrement)/@pIncrement))
N = (t.N-1)*@pIncrement+@pStart
FROM Tally t
ORDER BY t.N
;
GO
, JL
CREATE FUNCTION [dbo].[tfn_Tally]
(
@NumOfRows BIGINT = 1000000
,@StartWith BIGINT = 1563984
)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN
WITH
cte_n1 (n) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n (n)),
cte_n2 (n) AS (SELECT 1 FROM cte_n1 a CROSS JOIN cte_n1 b),
cte_n3 (n) AS (SELECT 1 FROM cte_n2 a CROSS JOIN cte_n2 b),
cte_n4 (n) AS (SELECT 1 FROM cte_n3 a CROSS JOIN cte_n3 b),
cte_Tally (n) AS (
SELECT TOP (@NumOfRows)
(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1) + @StartWith
FROM
cte_n4 a CROSS JOIN cte_n4 b
)
SELECT
t.n
FROM
cte_Tally t;