如何在SQL Server中基于1-12月范围自动批量插入12行数据
解决SQL Server自动插入12行序列数据的方法
嘿,你完全不用手动写12行INSERT语句,SQL Server里有好几种高效又简洁的自动实现方式,我给你分享几个常用的:
方法1:递归CTE生成连续序列
递归CTE是生成小范围连续数字的经典方式,代码逻辑清晰,兼容性好(几乎所有SQL Server版本都支持):
WITH MonthSequence AS ( -- 初始化起始值:1月对应的序列值 SELECT 1 AS column1 UNION ALL -- 递归生成后续序列值,直到12 SELECT column1 + 1 FROM MonthSequence WHERE column1 < 12 ) -- 插入到目标表 INSERT INTO YourTargetTable (column1, column2, column3) SELECT column1, 'value2', 'value3' FROM MonthSequence;
提示:如果需要生成超过100的序列,需要在语句末尾加
OPTION (MAXRECURSION 0),但这里只有12行,完全不需要额外设置。
方法2:利用系统内置数字表
SQL Server自带的master..spt_values表包含大量通用数据,我们可以用它快速生成序列,省去递归的麻烦:
INSERT INTO YourTargetTable (column1, column2, column3) SELECT TOP 12 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS column1, 'value2' AS column2, 'value3' AS column3 FROM master..spt_values;
解释:TOP 12限制只取12行,ROW_NUMBER()生成1到12的连续序号,ORDER BY (SELECT NULL)是为了避免不必要的排序开销,因为我们只需要连续数字,不需要特定的行顺序。
方法3:GENERATE_SERIES(SQL Server 2022+专属)
如果你用的是SQL Server 2022或更高版本,直接用GENERATE_SERIES函数一步到位,代码最简洁:
INSERT INTO YourTargetTable (column1, column2, column3) SELECT value, 'value2', 'value3' FROM GENERATE_SERIES(1, 12);
这个函数直接生成从1到12的整数序列,完全不需要额外的逻辑处理,非常直观。
最后小提醒
记得把YourTargetTable替换成你实际要插入的表名,如果value2和value3是数值类型(不是字符串),记得去掉单引号哦!
内容的提问来源于stack exchange,提问作者pjustindaryll
相关产品推荐
相关产品推荐

