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

SQL Server中仅单字段值变化的批量插入如何无需重复写语句

SQL Server 批量插入实现方案

你这种固定列+单动态列的批量插入场景,优先推荐不用循环的单语句方案,性能更高,实现更简单:

方案1:行值构造器批量插入(推荐)

SQL Server 2008及以上版本支持行值构造器语法,直接把所有colD的取值放到VALUES列表里即可,一次完成所有插入:

INSERT INTO sao.feature (colA, colB, colC, colD, colE)
SELECT
  '16.11.2021',
  '149',
  '79',
  colD_val,
  '3'
FROM (
  -- 此处补充所有需要插入的colD取值即可
  VALUES (225), (226), (320), (15200), (120), (5)
) AS d(colD_val);

方案2:值列表存储+遍历实现

如果你的colD取值需要动态维护、或者数量超过1000行(单VALUES列表最多支持1000行),可以用表变量存储取值后遍历:

-- 声明表变量存储所有colD取值,SQL Server无原生数组类型,用表变量替代
DECLARE @ColDValues TABLE (
  val INT
);

-- 插入所有需要的colD值
INSERT INTO @ColDValues(val)
VALUES (225), (226), (320), (15200), (120), (5);

-- 遍历插入
DECLARE @currVal INT;
DECLARE cur_colD CURSOR FOR SELECT val FROM @ColDValues;
OPEN cur_colD;
FETCH NEXT FROM cur_colD INTO @currVal;

WHILE @@FETCH_STATUS = 0
BEGIN
  INSERT INTO sao.feature (colA, colB, colC, colD, colE)
  VALUES ('16.11.2021', '149', '79', @currVal, '3');
  FETCH NEXT FROM cur_colD INTO @currVal;
END

CLOSE cur_colD;
DEALLOCATE cur_colD;

说明

  • 你最初的自增循环逻辑只适合colD为连续整数的场景,当前你的取值是非连续的,不适用这种逻辑。
  • 如果colD是字符串类型,需要给所有取值加上单引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:45:04