Generating data the Itzik Ben Gan way..

Select Union All as a cartesion product. I normally create for example a set of 4mrd records and use the numeric values to add columns and generate data based on the value. I often use modulo (%) to narrow down certain values.

with E00(N) AS (SELECT 1 UNION ALL SELECT 1),
        E02(N) AS (SELECT 1 FROM E00 a, E00 b),
        E04(N) AS (SELECT 1 FROM E02 a, E02 b),
        E08(N) AS (SELECT 1 FROM E04 a, E04 b),
        E16(N) AS (SELECT 1 FROM E08 a, E08 b),
        E32(N) AS (SELECT 1 FROM E16 a, E16 b),  -- 4.294.967.296
		-- E64(N) AS (SELECT 1 FROM E32 a, E32 b),
		-- E128(N) AS (SELECT 1 FROM E64 a, E64 b),
   cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E32)
 SELECT max(N)
    FROM cteTally
  -- WHERE N <= 2000000000;

Or ..

;WITH e1(n) AS
(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
	SELECT 1
), -- 10
e2(n) AS (SELECT 1 FROM e1 CROSS JOIN e1 AS b),  -- 10 x 10 = 100
e3(n) AS (SELECT 1 FROM e1 CROSS JOIN e2 AS b)   -- 10 X 100 = 1000
--e4(n) AS (SELECT 1 FROM e3 CROSS JOIN e3 AS b), 
--e5(n) AS (SELECT 1 FROM e4 CROSS JOIN e4 AS b),  
--e6(n) AS (SELECT 1 FROM e5 CROSS JOIN e5 AS b),  
--e7(n) AS (SELECT 1 FROM e6 CROSS JOIN e6 AS b)  
  SELECT n  = row_number() OVER (ORDER BY n) 
  from e3 ORDER BY n;

Semomething like this..

  ;WITH e1(n) AS
(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
	SELECT 1
), -- 10
e2(n) AS (SELECT 1 FROM e1 CROSS JOIN e1 AS b),  -- 10 x 10 = 100
e3(n) AS (SELECT 1 FROM e1 CROSS JOIN e2 AS b)   -- 10 X 100 = 1000
  SELECT n  = row_number() OVER (ORDER BY n) 
  INTO dbo.t1
  from e3 ORDER BY n;
SELECT value
FROM GENERATE_SERIES(1, 10);

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *