SQL发版脚本生成

针对MSSQL和MySQL数据库,自动生成带有存在性判断(IF NOT EXISTS)的可重复执行SQL发版脚本。支持建表、加字段、加索引操作,批量合并多步操作,脚本反复执行不报错,适用于系统版本迭代升级、自动化发版流程、CI/CD流水线场景。

MSSQL (SQL Server)
MySQL
加字段
建表
加索引
批量发版
添加字段(带存在性判断)
允许 NULL
生成结果
创建数据表(带存在性判断)
生成结果
添加索引(带存在性判断)
唯一索引 (UNIQUE)
生成结果
批量合并生成发版脚本
待执行步骤列表 (0)
暂无步骤,请在「加字段/建表/加索引」中点击「加入批量」按钮添加操作
批量发版脚本

功能特性

双数据库支持

同时支持 MSSQL (SQL Server) 和 MySQL 两大主流数据库,根据选择生成对应方言的SQL脚本。

存在性判断

自动为建表、加字段、加索引添加 IF NOT EXISTS 判断,脚本可重复执行不报错,避免发版中断。

批量合并

支持多步操作加入步骤列表,一键合并生成完整的发版脚本,按顺序执行,便于CI/CD流水线集成。

字段备注

MSSQL自动调用 sp_addextendedproperty 添加MS_Description备注,MySQL通过COMMENT子句实现,文档与结构同步。

一键复制

所有生成结果支持一键复制到剪贴板,方便粘贴到SSMS、Navicat或数据库迁移脚本中使用。

存储过程封装

MySQL脚本使用存储过程+预处理方式实现存在性判断(5.7兼容),MSSQL直接使用IF块,风格地道规范。

使用说明

1. 添加字段

  • 选择目标数据库类型(MSSQL / MySQL),切换到「加字段」标签页。
  • 填写「表名」和「字段名」(必填),选择「字段类型」(如 NVARCHAR(50)INTDATETIME)。
  • 可选:填写默认值、勾选是否允许NULL、填写字段备注说明。
  • 点击「生成SQL」即可得到带存在性判断的脚本,可重复执行。
  • 如果有多个字段需要添加,点击「加入批量」将当前步骤加入批次列表。

2. 创建数据表

  • 切换到「建表」标签页,填写表名和字段定义。
  • 字段定义使用标准SQL列定义语法,多列之间用逗号分隔,如 Id INT PRIMARY KEY, Name NVARCHAR(100) NOT NULL
  • MSSQL中主键自增使用 IDENTITY(1,1),MySQL中使用 AUTO_INCREMENT
  • MySQL生成的脚本默认使用 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

3. 添加索引

  • 切换到「加索引」标签页,填写表名、索引名和索引列。
  • 多列索引用逗号分隔,支持排序方向,如 UserId, CreatedAt DESC
  • 勾选「唯一索引」可生成 CREATE UNIQUE INDEX 语句。
  • 索引名建议使用规范:IX_表名_列名UK_表名_列名(唯一索引)。

4. 批量发版

  • 在各操作标签页中点击「加入批量」,将步骤添加到「批量发版」的步骤列表。
  • 步骤按添加顺序执行,可点击步骤右侧删除按钮移除单步。
  • 切换数据库类型后,所有批量步骤将使用新的数据库方言生成。
  • 点击「生成批量脚本」合并输出完整脚本,脚本开头包含生成时间戳,方便追溯。

典型使用场景

  • 系统版本迭代:新版本发布前,将所有数据库结构变更统一生成可重复执行的脚本。
  • 多环境部署:开发/测试/生产环境重复执行同一脚本,不用担心因为部分已执行而报错。
  • CI/CD流水线:生成的脚本直接纳入数据库迁移工具(如Flyway、Liquibase、DbUp)执行。
  • 客户现场升级:面对不确定的客户数据库现状,用带存在性判断的脚本安全升级。
  • 多人协作:统一团队SQL脚本编写风格,避免因为忘记加判断导致发版失败。

常见问题

为什么MySQL不直接用ALTER TABLE ... IF NOT EXISTS?
MySQL 8.0+ 才原生支持 ALTER TABLE ADD COLUMN IF NOT EXISTSCREATE TABLE IF NOT EXISTS 语法,5.7 及以下版本不支持。本工具提供「MySQL 版本」切换:选择 8.0+ 时使用原生语法(脚本更简洁、无存储过程开销);选择 5.7(默认,兼容5.5+)时采用存储过程+INFORMATION_SCHEMA查询方式实现存在性判断。请根据您的生产环境版本选择,避免语法不兼容报错。
MSSQL生成脚本中的GO是什么意思?
GO 是 SQL Server Management Studio (SSMS) 和 sqlcmd 工具的批处理分隔符,不是 T-SQL 语言的一部分。它告诉工具将前面的语句作为一个批次发送到服务器执行。每个 IF/BEGIN...END 块单独一批执行可以避免某些作用域问题(如新增列后立即引用导致的编译错误)。如果您在程序中执行脚本(如 ADO.NET、Dapper),需要将脚本按 GO 拆分后逐批执行,或使用支持GO解析的库。
加字段时如果表非常大,会不会锁表很久?
本工具只生成SQL语句,不负责实际执行。执行时的锁表行为取决于数据库版本和操作类型:MSSQL 2016+ / MySQL 5.6+ 对于添加可空且无默认值(或volatile默认值)的列通常是元数据操作,几乎瞬间完成;如果加了默认值,MySQL 5.7 会重建表(锁表),MySQL 8.0+ 支持 Instant DDL,MSSQL 2012+ 的 WITH (ONLINE=ON) 可在线操作。生产环境建议在低峰期执行,并先在预发环境验证。
批量脚本里的执行顺序有讲究吗?
是的,请务必按照正确的依赖顺序添加步骤:先建表 → 再加字段 → 最后加索引。如果B表的外键依赖A表的主键,A表必须先建。加字段后加索引(依赖字段存在)。批量功能按照您添加的顺序原样生成,不会自动调序,建议添加前规划好顺序。
生成的脚本在MySQL中报错怎么办?
MySQL脚本开头使用了 DELIMITER // 来临时改变语句分隔符(因为存储过程内部也有分号)。请确保:1) 使用命令行 mysql 客户端或 Navicat / DBeaver 等支持DELIMITER的工具执行;2) 不要手动去除DELIMITER语句;3) 存储过程名中表名/字段名如有特殊字符已做下划线替换,正常不会冲突。如仍有问题,可把生成的脚本复制到本工具的"SQL格式化"中检查语法。
本工具会保存我的表结构信息吗?
完全不会。所有SQL生成都在服务器内存中完成,仅在请求处理过程中使用数据,不会持久化存储您的表名、字段名等信息。生成完毕即刻返回,您的数据只在您和服务器之间的一次HTTP请求中短暂存在。敏感的生产环境表结构建议本地填写后断网离线核对。