SQL 文件拆分与依赖合并工具
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_15292d5a/yjkj-sql-splitter。
技能介绍
要解决的问题
大型数据库迁移时,单个 SQL 文件常混合 CREATE TABLE、CREATE VIEW、存储过程和触发器,手工拆分容易漏依赖,导入顺序一错就会出现对象缺失。sql-splitter 面向这类脚本整理场景,把多对象 SQL 文件或目录拆成独立 .sql 文件,并生成依赖排序的合并脚本。
核心能力与关键步骤
- 对象边界识别:基于
BEGIN...END深度匹配处理过程体,兼容IF...THEN...END IF、CASE...END CASE、LOOP...END LOOP等嵌套;对 Oracle/达梦的/、SQL Server 的GO、PostgreSQL 的$$...$$分别定位对象边界。 - 依赖排序:解析对象间引用,排除自引用,遇到循环依赖时按对象类型优先级追加,最终生成
merge_all.sql。 - 方言适配:支持
mysql、postgresql、oracle、sqlserver、dm、generic,合并脚本会使用对应加载方式,例如 Oracle/达梦的@@filename、SQL Server 的:r filename、PostgreSQL 的\i filename。 - 对象类型:覆盖表、视图、函数、存储过程、触发器、索引、唯一索引、约束、序列、包、同义词、事件、物化视图、类型等。
- 批量与预览:可处理单文件、目录或多文件,支持
--no-merge、预览、检查点和配置管理,方便中断恢复与结果核对。
适用边界与注意点
该工具适合规范化程度较高的 SQL 脚本拆分;若对象缺少分号、视图缺少 AS、过程体缺少 BEGIN/AS,仍可能出现边界识别不准或重复文件。批量处理会按原文件名创建子目录,同名对象会追加序号。运行前建议保留备份,并用 --dialect 明确数据库类型。
使用场景
- 整理旧系统导出的单体 MySQL 初始化脚本,把表、视图、存储过程拆成独立文件,并生成导入顺序正确的 merge_all.sql。
- 在 Oracle 到达梦迁移前,将 SQL Server 风格的过程、函数和视图脚本拆分,并转换为达梦可执行的独立对象文件。
- 核对一批 PostgreSQL 迁移脚本中视图、物化视图和函数的引用关系,拆分后生成按依赖排序的加载脚本。
- 批量处理目录里的多个数据库对象脚本,保留检查点并在中断后继续拆分,不重复生成同名文件。
适合人员
- 负责旧数据库迁移的 DBA,需要把混合对象脚本拆成可单独审查和按序导入的文件。
- 维护多套方言的数据库工程师,需要在 MySQL、PostgreSQL、Oracle、SQL Server 或达梦间整理对象脚本。
- 交付数据库初始化脚本的后端工程师,需要自动生成依赖排序的 merge_all.sql 并核对拆分结果。
- 处理大型对象脚本的运维工程师,需要批量拆分目录、断点续传和预览对比结果。