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

如何将AppScript项目中Google Sheet的数据迁移至Microsoft Azure SQL数据库?

从Google Sheets(AppScript项目)迁移数据到Azure SQL数据库

1. 前期准备

  • 确认Azure SQL核心信息:服务器全称、数据库名、登录用户名/密码,同时在Azure SQL防火墙规则中添加Google AppScript的出口IP段(或直接临时允许所有IP用于测试,迁移完成后再收紧),避免连接被拦截。
  • 对齐数据结构:提前在Azure SQL中创建目标表,确保表字段的数量、顺序、数据类型与Google Sheets的列完全匹配(比如Sheets的日期对应SQL的DATE/DATETIME,文本字段要预留足够长度)。
  • 启用AppScript的JDBC服务:AppScript内置Jdbc类用于数据库连接,无需额外安装,但部署脚本时需授予连接到外部服务的权限。

2. 批量读取Google Sheets数据

避免逐行读取拖慢效率,直接读取Sheet内的有效数据(跳过表头):

function readSheetData() {
  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("你的Sheet名称");
  // 从第2行开始读取(跳过表头),获取所有非空行
  const rawData = targetSheet.getDataRange().offset(1, 0).getValues();
  return rawData.filter(row => row.some(cell => cell !== ""));
}

如果数据量超过1万行,建议分批次读取(比如每次读5000行),防止内存溢出。

3. 连接Azure SQL并批量插入数据

用JDBC建立连接,通过批量插入提升迁移效率,避免逐行执行INSERT:

function migrateToAzureSQL() {
  const sheetData = readSheetData();
  if (sheetData.length === 0) {
    SpreadsheetApp.getUi().alert("没有可迁移的数据");
    return;
  }

  // Azure SQL连接配置
  const server = "你的服务器名.database.windows.net";
  const dbName = "你的数据库名";
  const user = "登录用户名";
  const pwd = "登录密码";
  const jdbcUrl = `jdbc:sqlserver://${server}:1433;databaseName=${dbName};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;`;

  try {
    const conn = Jdbc.getConnection(jdbcUrl, user, pwd);
    conn.setAutoCommit(false); // 关闭自动提交,批量操作后统一提交

    // 替换为你的目标表字段和SQL模板
    const insertSql = "INSERT INTO 目标表名 (字段1, 字段2, 字段3) VALUES (?, ?, ?)";
    const pstmt = conn.prepareStatement(insertSql);

    sheetData.forEach(row => {
      // 根据字段类型赋值,注意数据转换:比如Sheets日期转SQL日期
      pstmt.setString(1, row[0]); // 第1列对应字段1(字符串类型)
      pstmt.setInt(2, row[1]);    // 第2列对应字段2(整数类型)
      pstmt.setDate(3, new Date(row[2])); // 第3列对应字段3(日期类型)
      pstmt.addBatch();
    });

    // 执行批量插入并提交
    pstmt.executeBatch();
    conn.commit();

    // 关闭资源
    pstmt.close();
    conn.close();
    SpreadsheetApp.getUi().alert("数据迁移完成!");
  } catch (err) {
    SpreadsheetApp.getUi().alert(`迁移失败:${err.toString()}`);
    throw err;
  }
}

关键注意点:

  • 数据类型转换:比如Sheets的日期对象需转为SQL兼容的Date类型,数字要匹配SQL字段的精度范围。
  • 异常捕获:避免脚本崩溃,同时输出具体错误信息方便排查(比如字段类型不匹配、连接超时)。

4. 验证迁移结果

  • 执行SQL查询核对行数:SELECT COUNT(*) FROM 目标表名,与Sheets内的有效行数对比。
  • 随机抽查数据:检查特殊字符(中文、引号)、日期格式、数字精度是否正常存储。

5. 后续优化(可选)

  • 定时同步:给脚本添加时间驱动触发器,实现定期增量迁移(需在代码中添加增量逻辑,比如只迁移新增行)。
  • 超大数据量处理:若数据超过10万行,可先将Sheets导出为CSV,再用Azure数据工厂或BULK INSERT工具导入,效率更高。
  • 性能优化:给Azure SQL目标表添加合适的索引,提升后续查询速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:20