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

使用Golang将数组数据批量插入SQL Server无需外部文件的实现方法

内存数组批量插入SQL的实现方案

完全可以不用BULK INSERT和外部文件,仅靠一次SQL查询完成所有行插入,核心是使用SQL原生支持的多行插入语法。

核心语法逻辑

标准SQL的INSERT语句支持一次性传入多组值,语法如下:

INSERT INTO 你的表名 (name, age, job)
VALUES
    ('<name1>', <age1>, '<job1>'),
    ('<name2>', <age2>, '<job2>'),
    -- 其余所有行的数值组
    ('<nameN>', <ageN>, '<jobN>');

这种方式仅发起一次数据库请求,性能比逐行插入高10~100倍不等,完全基于你内存中的数组数据实现,不需要任何外部文件依赖。

实现注意要点

  • 优先使用参数化查询拼接语句,不要直接把字段值拼到SQL字符串中,避免SQL注入风险
  • 不同数据库对单次请求的最大数据量有上限,比如MySQL的max_allowed_packet参数会限制单次请求大小,如果你的数组长度超过1万条,可以拆分成分组,每组500~2000条分批插入即可
  • 所有行的字段顺序要和INSERT语句后声明的列顺序严格对应,避免数据插错列

常用语言示例(Python+MySQL为例)

用参数化查询的安全写法:

import mysql.connector

# 你现有的结构体数组
row = [
    {"name": "张三", "age": 25, "job": "后端工程师"},
    {"name": "李四", "age": 27, "job": "产品经理"},
    {"name": "王五", "age": 24, "job": "UI设计师"}
    # 其余数据
]

# 按列顺序整理参数列表
params = []
for item in row:
    params.append( (item["name"], item["age"], item["job"]) )

# 构造参数占位符
placeholder = ', '.join(['(%s, %s, %s)'] * len(params))
sql = f"INSERT INTO employee (name, age, job) VALUES {placeholder}"

# 一次性执行语句
conn = mysql.connector.connect(host="127.0.0.1", user="root", password="your_pass", database="your_db")
cursor = conn.cursor()
# 把二维参数列表展平为一维传入
cursor.execute(sql, tuple([i for item in params for i in item]))
conn.commit()

cursor.close()
conn.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:00:01