無料ツール

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 で追加した外部キーはどれも 2 つの列を結ぶ線になり、テーブルが dbo、hr などの複数のスキーマに分かれている場合は、スキーマごとに枠が付きます。

  3. Archboard で開く

    新しい図として保存すれば、配置の変更、注釈の追加、リンクの共有、SVG・PNG へのエクスポートができます。登録は Google か GitHub のアカウントだけで済みます。

SSMS でデータベーススキーマをスクリプト化する

SQL Server Management Studio のオブジェクト エクスプローラーでデータベースを右クリックし、次を選びます。

  1. テーブルを選び、Advanced で Types of data to script を Schema only のままにして、スクリプトを .sql ファイルに保存します。1 つのテーブルだけなら、そのテーブルを右クリックして Script Table as、CREATE To の順に選びます。

    Tasks > Generate Scripts

スクリプト内の T-SQL 構文

T-SQL スクリプトに含まれる各構文の扱いは次のとおりです。

[dbo].[Employees]
読み込みます。角かっこや二重引用符で囲んだ名前は大文字と小文字を区別せずに照合し、dbo を既定のスキーマとして扱います。
GO
1 行に単独で書かれている場合はバッチの区切りとして扱います。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 で開くには無料アカウントが必要です。

1分でキャンバスを開く

Google または GitHub でサインイン。1シートは無料で、チームが加わったらアップグレード。