免费工具

SQL Server 转 ER 图

粘贴从 SQL Server Management Studio 导出的 T-SQL 脚本,GO 行、[dbo] 方括号和 WITH CHECK 约束都可以保留,即可得到 ER 图;脚本使用多个架构时,每个架构各有一个框。试试人事与薪资示例,其中包含部门、职位以及向上级汇报的员工。

示例输出

由 SQL Server 示例绘制的示例图表
试试示例人事与薪资

使用方法

  1. 粘贴或拖入 T-SQL 脚本

    SSMS 的 Generate Scripts 生成的文件、Script Table as 的输出、EF Core 迁移脚本,或手写的 CREATE TABLE 语句都可以,有无分号均可。

  2. 查看表和外键

    用 ALTER TABLE 添加的每个外键都会成为两列之间的连线;表分布在 dbo、hr 等多个架构中时,每个架构会有自己的框。

  3. 在 Archboard 中打开

    保存为新图表后,可以重新排列、添加注释、分享链接,或导出为 SVG 和 PNG。注册只需 Google 或 GitHub 账号。

在 SSMS 中为数据库结构生成脚本

在 SQL Server Management Studio 的对象资源管理器中右键单击数据库,然后选择:

  1. 选择要导出的表,在 Advanced 中让 Types of data to script 保持为 Schema only,然后把脚本保存为 .sql 文件。只导出一张表时,右键单击该表,依次选择 Script Table as 和 CREATE To。

    Tasks > Generate Scripts

脚本中的 T-SQL 语法

T-SQL 脚本中各语法结构的处理方式:

[dbo].[Employees]
会读取。方括号或双引号中的名称匹配时不区分大小写,dbo 视为默认架构。
GO
单独占一行时作为批分隔符,带不带 GO 2 这样的次数都一样。没有分号的语句也会被拆分。
IDENTITY(1,1)
不显示:列保留 int 等类型,种子值和增量不写在卡片上。
WITH CHECK ADD CONSTRAINT
会读取。SSMS 在表之后用 WITH CHECK 或 WITH NOCHECK 添加的外键会成为关系连线。
ALTER TABLE … CHECK CONSTRAINT
会被跳过。这条语句只是启用一个已经存在的约束,不会给图表增加任何内容。
ON [PRIMARY]
与 TEXTIMAGE_ON 以及 WITH (PAD_INDEX = OFF, …) 这类索引选项一起跳过。
NVARCHAR(MAX)
和其他带长度或精度的类型一样,显示为列类型。
IF NOT EXISTS … BEGIN … END
去掉外层判断后读取。EF Core 幂等脚本和 SSMS 写出的存在性检查中的 CREATE TABLE,会像其他语句一样被读取。

T-SQL 图表不包含的内容

  • 存储过程、视图、函数和触发器。每个主体都会跳过到下一个 GO 并计数,因此在存储过程中创建的表不会被绘制。
  • #staging、##shared 这类临时表以及表变量。它们只在会话或批处理期间存在:临时表会被排除并计数,表变量则直接跳过、不计数。
  • 扩展属性,包括用 sp_addextendedproperty 添加的 MS_Description 说明。说明文字不会被读取。
  • 运行中的 SQL Server 或 Azure SQL 数据库上的任何信息。不会建立连接,因此不显示行数、索引使用情况以及保存在 SSMS 中的数据库关系图。

SQL Server 常见问题

哪些 SSMS 脚本选项最合适?

使用 Generate Scripts 的默认设置即可:表会写成 CREATE TABLE,外键随后写成 ALTER TABLE … WITH CHECK ADD CONSTRAINT,都会被读取。打开 Check for object existence 后,每个对象都会被包在 IF NOT EXISTS 判断里,这也能正常读取。连数据一起导出只会让文件更大,因为数据行会被跳过。

需要删除 GO 行吗?

不需要。GO 会像在 SSMS 和 sqlcmd 中一样被当作批分隔符读取,带重复次数的 GO 也一样。没有 GO 也没有分号的脚本同样可用:每遇到 CREATE、ALTER 等关键字就开始一条新语句,而 ON DELETE SET NULL 这类短语不会被拆开。

dbo 和其他架构如何显示?

脚本使用多个架构时,每个包含表的架构都会成为一个框:[hr].[Employees] 位于 dbo 框旁边的 hr 框中,跨架构的外键会穿过框画出。名称匹配不区分大小写,与 SQL Server 默认排序规则的行为相同。

支持 Azure SQL Database 吗?

支持。Azure SQL Database 和 Azure SQL Managed Instance 都使用 T-SQL,因此在 SSMS 中从它们生成的脚本可以同样读取,EF Core 迁移脚本也一样。将 SSMS 连接到 Azure 服务器,然后像对其他 SQL Server 一样使用 Generate Scripts。

粘贴脚本时会保存什么吗?

预览不会被保存。选择“在 Archboard 中打开”后,绘制出的图表,包括表卡片、列名和类型、架构框以及连线,会作为新图表保存到你的工作区中。之后在 SQL Server 中所做的修改不会更新它。

SQL Server ER 图工具免费吗?

是的。粘贴脚本和查看图表无需账号。在 Archboard 中打开图表需要一个免费账号。

一分钟打开画布

使用 Google 或 GitHub 登录。单席位免费,团队加入后再升级。