如何将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
相关产品推荐
相关产品推荐

