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

如何通过Excel公式动态生成SQL INSERT脚本?附多技术示例

一、Excel动态生成SQL INSERT脚本解决方案

核心公式实现

针对需求,可使用以下公式实现D列随当前行变化,E、F列自动沿用最近的非空/非0行对应值:

="INSERT INTO MYTABLE (ROLE_ID,GROUP,SUBGROUP) values('"&D8&"','"&LOOKUP(2,1/($D$8:D8<>"")/($D$8:D8<>"0"),$E$8:E8)&"','"&LOOKUP(2,1/($D$8:D8<>"")/($D$8:D8<>"0"),$F$8:F8)&"')"

公式逻辑说明

  • LOOKUP(2,1/($D$8:D8<>"")/($D$8:D8<>"0"),$E$8:E8):构造条件数组,定位当前行之前**最后一个D列非空且不等于"0"**的行,提取对应E列值,实现E、F列的自动延续
  • 下拉公式时,$D$8:D8这类混合引用会自动扩展范围,确保每次都能匹配到最新的有效E、F值

二、多技术场景示例

1. 常用SQL语句示例

批量插入(与Excel生成场景呼应)

INSERT INTO MYTABLE (ROLE_ID,GROUP,SUBGROUP)
VALUES 
('R001','ADMIN','ROOT'),
('R002','ADMIN','ROOT'),
('R003','USER','NORMAL');

条件更新

UPDATE MYTABLE 
SET SUBGROUP = 'PRIVILEGED'
WHERE GROUP = 'USER' AND ROLE_ID LIKE 'R%';

关联查询

SELECT r.ROLE_ID, g.GROUP_NAME
FROM ROLES r
JOIN GROUPS g ON r.GROUP = g.GROUP_CODE
WHERE r.STATUS = 'ACTIVE';

2. JavaScript工具函数示例

格式化SQL插入语句(模拟Excel逻辑)

function generateInsertSql(roleList, currentGroup, currentSubgroup) {
  return roleList
    .filter(role => role && role !== '0')
    .map(role => `INSERT INTO MYTABLE (ROLE_ID,GROUP,SUBGROUP) values('${role}','${currentGroup}','${currentSubgroup}');`)
    .join('\n');
}

// 调用示例
const roles = ['R001', 'R002', '0', 'R003', 'R004'];
const sql = generateInsertSql(roles.slice(0,2), 'ADMIN', 'ROOT') + '\n' + generateInsertSql(roles.slice(3), 'USER', 'NORMAL');
console.log(sql);

异常捕获与处理

try {
  const response = await fetch('/api/roles');
  if (!response.ok) throw new Error(`请求失败:${response.status}`);
  const data = await response.json();
} catch (error) {
  console.error('处理数据时出错:', error.message);
  notifyUser('数据加载失败,请稍后重试');
}

3. Java反射与异常处理示例

通过反射调用方法

import java.lang.reflect.Method;

public class ReflectDemo {
    public static void main(String[] args) {
        try {
            Class<?> clazz = Class.forName("com.example.RoleService");
            Object instance = clazz.getDeclaredConstructor().newInstance();
            Method method = clazz.getMethod("getRoleById", String.class);
            Object result = method.invoke(instance, "R001");
            System.out.println("查询结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("反射调用失败", e);
        }
    }
}

自定义业务异常

public class RoleNotFoundException extends RuntimeException {
    public RoleNotFoundException(String roleId) {
        super(String.format("角色ID %s 不存在", roleId));
    }
}

// 业务层使用
public Role getRoleById(String roleId) {
    Role role = roleDao.selectById(roleId);
    if (role == null) {
        throw new RoleNotFoundException(roleId);
    }
    return role;
}

4. Axios HTTP请求示例

批量提交角色数据

import axios from 'axios';

async function batchSubmitRoles(roleDataList) {
  try {
    const response = await axios.post('/api/roles/batch', roleDataList, {
      headers: { 'Content-Type': 'application/json' },
      timeout: 5000
    });
    return response.data;
  } catch (error) {
    if (error.response) {
      console.error('服务器错误:', error.response.status, error.response.data);
    } else if (error.request) {
      console.error('无响应:', error.request);
    } else {
      console.error('请求错误:', error.message);
    }
    throw error;
  }
}

5. Shell脚本批量生成SQL示例

从文本文件生成INSERT语句

#!/bin/bash
# 输入文件格式:每行ROLE_ID,GROUP和SUBGROUP通过变量指定
GROUP="ADMIN"
SUBGROUP="ROOT"
INPUT_FILE="roles.txt"
OUTPUT_FILE="insert_roles.sql"

echo "-- 批量插入角色数据" > $OUTPUT_FILE
while read -r ROLE_ID; do
  if [[ -n $ROLE_ID && $ROLE_ID != "0" ]]; then
    echo "INSERT INTO MYTABLE (ROLE_ID,GROUP,SUBGROUP) values('$ROLE_ID','$GROUP','$SUBGROUP');" >> $OUTPUT_FILE
  fi
done < $INPUT_FILE

echo "SQL文件生成完成:$OUTPUT_FILE"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:41:10