要将 SQL Server 数据库 HS_ERP_2025_TEST
生成脚本并迁移到 MySQL,需分步骤处理结构、数据及程序逻辑的转换。以下是完整流程和工具建议:
🔧 一、生成 SQL Server 数据库脚本(使用 SSMS)
- 连接数据库
- 打开 SQL Server Management Studio (SSMS),连接到目标实例,展开数据库节点。
- 启动生成脚本向导
- 右键点击
HS_ERP_2025_TEST
→ “任务” → “生成脚本”。
- 右键点击
- 配置导出选项
- 选择对象:勾选“整个数据库及所有对象”或按需选择表/视图/存储过程等。
-
- 脚本选项(关键设置):
- 输出类型:保存为
.sql
文件。 - 高级选项 → “要编写脚本的数据的类型”:
- 仅限架构(导出表结构) → 后续需单独迁移数据。
- 架构和数据(导出表结构+数据) → 适合小数据量。
- 编写索引/外键/触发器等脚本:按需勾选(默认勾选索引和外键)。
- 输出类型:保存为
- 保存路径:指定脚本输出位置。
- 脚本选项(关键设置):
⚙️ 二、转换脚本为 MySQL 兼容格式
导出的 SQL Server 脚本需手动或工具转换语法和数据类型:
1. 数据类型映射
SQL Server 类型 | MySQL 类型 |
---|---|
NVARCHAR | VARCHAR |
DATETIME | DATETIME /TIMESTAMP |
BIT | TINYINT(1) |
UNIQUEIDENTIFIER | CHAR(36) (UUID) |
2. 函数与语法替换
GETDATE()
→NOW()
ISNULL(col,0)
→IFNULL(col,0)
TOP 100
→LIMIT 100
- 删除
[dbo].
前缀和[ ]
符号。
3. 工具辅助转换
- SQLines:粘贴 SQL Server 脚本到左侧,自动转译基础语法。
- SchemaZen(命令行):批量生成并转换脚本:
SchemaZen.exe script --server localhost --database HS_ERP_2025_TEST --scriptDir C:\mysql_scripts
📥 三、导入 MySQL 数据库
- 创建目标数据库
CREATE DATABASE HS_ERP_2025_TEST DEFAULT CHARSET=utf8mb4;
- 执行转换后的脚本
- 通过 MySQL Workbench 的 “File” → “Run SQL Script” 导入。
- 或使用命令行:
mysql -u root -p HS_ERP_2025_TEST < C:\mysql_scripts\converted.sql
🚨 四、迁移数据与程序逻辑
1. 数据迁移
- 小数据量:直接用 SSMS 导出时选择“架构和数据”。
- 大数据量:
- 导出为 CSV:SSMS 向导或
bcp
工具。 - MySQL 导入:
LOAD DATA INFILE
或 Workbench 的 “Data Import”。
- 导出为 CSV:SSMS 向导或
2. 存储过程/触发器迁移
- 手动重写:因语法差异大(如 T-SQL 变量声明、游标逻辑)。
- 示例转换:
-- SQL Server CREATE PROCEDURE GetOrders AS SELECT * FROM Orders; -- MySQL DELIMITER $$ CREATE PROCEDURE GetOrders() BEGIN SELECT * FROM Orders; END
DELIMITER ;
```
#### 3. **视图与函数**
- 检查是否包含 SQL Server 特有函数(如 `ROW_NUMBER()`),替换为 MySQL 等效写法(如变量模拟)。
---
### ✅ 五、迁移后验证
1. **数据一致性**
- 对比记录数:`SELECT COUNT(*) FROM table`。
- 校验关键字段:抽样检查金额、日期等字段。
2. **性能测试**
- 使用 `sysbench` 压测查询响应时间。
3. **应用测试**
- 确保应用连接 MySQL 后功能正常,尤其注意大小写敏感问题(MySQL Linux 默认区分大小写)。
---
### ⚠️ 六、注意事项
1. **字符集统一**
- MySQL 全程使用 `utf8mb4`,避免中文乱码。
2. **自增主键处理**
- SQL Server:`IDENTITY(1,1)` → MySQL:`AUTO_INCREMENT`。
3. **禁用 SQL Server 特有特性**
- 如计算列、XML 数据类型需重构。
---
### 💎 推荐工具总结
| **工具** | **用途** | **适用场景** |
|------------------------|------------------------------|--------------------------|
| **SSMS 生成脚本** | 导出表/视图/存储过程定义 | 基础结构迁移 |
| **SQLines** | 自动转换数据类型和基础语法 | 快速转译简单脚本 |
| **MySQL Workbench** | 数据导入/导出 + 连接测试 | 全流程可视化操作 |
| **SchemaZen** | 命令行批量生成与转换脚本 | 自动化部署需求 |
> 迁移复杂数据库时,**优先迁移表结构和数据**,存储过程/触发器单独重写。若数据量超 10GB,建议分批次导出或使用 ETL 工具(如 AWS DMS)。