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

如何将两个列表组合后批量插入数据库表(避免手动编写大量INSERT语句)

如何将两个列表组合后批量插入数据库表(避免手动编写大量INSERT语句)

嘿,我太懂手动写几百条INSERT的痛苦了!完全没必要这么折腾,用SQL的交叉连接(CROSS JOIN)就能一次性搞定所有组合,一行核心语句就够了,给你捋捋具体怎么做:

方案一:一次性快速实现(无需额外建表)

如果只是临时操作,直接用**表值构造器(VALUES)**把两个列表写进SQL语句里,再通过CROSS JOIN自动生成所有配对组合:

INSERT INTO dbo.TableName (state, region, date, person)
SELECT 
    s.state_abbr,
    r.region_code,
    GETDATE(),
    'SampleName'
FROM 
    -- 这里放你的35个州缩写列表
    (VALUES 
        ('AK'), ('AL'), ('AZ'), 
        -- 把剩下的32个州缩写依次补在这里
    ) AS s(state_abbr)
CROSS JOIN 
    -- 这里放你的10个非连续区域码列表
    (VALUES 
        ('02'), ('39'), ('44'), 
        -- 把剩下的7个区域码依次补在这里
    ) AS r(region_code);

原理很简单:CROSS JOIN会自动将第一个列表的每一条数据,和第二个列表的每一条数据进行配对,刚好生成35×10=350条你需要的组合数据。固定值GETDATE()和'SampleName'直接在SELECT语句里带上就行,不用重复写几百次。

方案二:可复用的持久化方案

如果这两个列表以后还会用到,或者数据量更大,建议先把数据存入临时表(或永久表),再进行交叉连接插入:

-- 第一步:创建临时表存储州缩写
CREATE TABLE #States (state_abbr CHAR(2));
INSERT INTO #States 
VALUES ('AK'), ('AL'), ('AZ'), /* 补全剩余州缩写 */;

-- 第二步:创建临时表存储区域码
CREATE TABLE #Regions (region_code CHAR(2));
INSERT INTO #Regions 
VALUES ('02'), ('39'), ('44'), /* 补全剩余区域码 */;

-- 第三步:交叉连接两个临时表,批量插入目标表
INSERT INTO dbo.TableName (state, region, date, person)
SELECT 
    s.state_abbr,
    r.region_code,
    GETDATE(),
    'SampleName'
FROM #States s
CROSS JOIN #Regions r;

-- 用完临时表可以删除(可选,临时表会在会话结束后自动消失)
DROP TABLE #States;
DROP TABLE #Regions;

为啥不用WHILE循环?

其实完全没必要用WHILE循环,交叉连接是SQL专门为这种“全组合配对”场景设计的语法,不仅代码更简洁,执行效率也比循环高得多——数据库引擎对这类集合操作的优化,远比对逐行循环的优化好。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:53:10