生成指定数字范围的记录行

 /*==================================*/
   /* 功能: 获取指定范围的数字数列*/
  /* 说明: 交叉最后层级的CTE得到的数据行:在L级(从0开始计数)得到的行的总数为2^2^L。*/
  /*       例如:在5级就会得到4 294 967 596行。5级的CTE提供了超过40亿的行。 */
  /* 作者:  网上摘抄*/
  /* 创建: 2016-07-16*/
  /* 修改: */
  /*
     2016-08-19 对 @bintHigh、@bintLow 进行判断,防止TOP子句含有无效的值
  */
  /*==================================*/
 
 CREATE FUNCTION dbo.fn_GetNums
  (
      @bintLow BIGINT,
      @bintHigh BIGINT
  ) RETURNS TABLE
  AS
  RETURN
  (
      WITH
          L0 AS (SELECT c FROM (VALUES(1), (1)) AS LO(c)),
          L1 AS (SELECT 1 AS c FROM L0 AS T CROSS JOIN L0 AS T2),
          L2 AS (SELECT 1 AS c FROM L1 AS T CROSS JOIN L1 AS T2),
         L3 AS (SELECT 1 AS c FROM L2 AS T CROSS JOIN L2 AS T2),
         L4 AS (SELECT 1 AS c FROM L3 AS T CROSS JOIN L3 AS T2),
         L5 AS (SELECT 1 AS c FROM L4 AS T CROSS JOIN L4 AS T2),
         Nums AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM L5)
   
      SELECT TOP (CASE WHEN @bintHigh >=@bintLow THEN @bintHigh - @bintLow + 1 ELSE 0 END) @bintLow + RowNum - 1 AS Num
      FROM Nums
     ORDER BY RowNum ASC
 )
 GO
 
原文地址:https://www.cnblogs.com/BTag/p/14009975.html