You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成连续序号并填充到SQL临时表,上限为另一张表row字段最大值

解决方案

方案1:递归CTE实现(兼容SQL Server 2008及以上版本)

适用于绝大多数常用SQL Server版本,无需依赖高版本特性:

DECLARE @reportTable TABLE (row int, [1] nvarchar(max), [2] nvarchar(max))
-- 先获取序列上限值
DECLARE @MaxRow INT
SELECT @MaxRow = MAX(row) FROM @Days

-- 递归生成1到@MaxRow的连续整数序列
;WITH NumCTE AS (
    SELECT 1 AS row
    UNION ALL
    SELECT row + 1 FROM NumCTE WHERE row < @MaxRow
)
INSERT INTO @reportTable (row, [1], [2])
SELECT row, '', '' FROM NumCTE
-- 序列长度超过100时需加下列参数解除递归层数默认限制
OPTION (MAXRECURSION 0)

方案2:内置函数实现(仅支持SQL Server 2022、Azure SQL等新高版本)

直接调用官方内置序列生成函数,代码更简洁性能更优:

DECLARE @reportTable TABLE (row int, [1] nvarchar(max), [2] nvarchar(max))
-- 先获取序列上限值
DECLARE @MaxRow INT
SELECT @MaxRow = MAX(row) FROM @Days

INSERT INTO @reportTable (row, [1], [2])
SELECT value, '', '' FROM GENERATE_SERIES(1, @MaxRow)

注意事项

  • 两种方案均无需依赖@Days表的完整序列,仅取其row字段最大值作为生成上限,完全规避原表断号问题
  • 递归CTE方案中如果确定最大序列长度不超过100,可以删除最后的OPTION (MAXRECURSION 0)语句

内容的提问来源于stack exchange,提问作者ranto1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 03:30:02