mcpField
A
azuresql-db-seed

azuresql-db-seed

github.com/microsoftデータ・データベース2261 回インストール1 週間前に更新
リポジトリ

azuresql-db-seed について

既存の Azure SQL Database コンテナーにサンプルデータを投入するスキルです。外部キー順の挿入、集合ベースの生成、一括ロード、パラメーター化挿入を扱い、開発やテストの準備に利用できます。

主な機能

  1. 01外部キー順でのデータ挿入
  2. 02tally 方式によるデータ生成
  3. 03bcp によるローカル CSV のロード
  4. 04Node と Python の挿入レシピ

活用シーン

  1. 01開発用データベースへのサンプルデータ投入
  2. 02数百から数千行のテストデータ生成
  3. 03ローカル CSV からのデータロード

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/microsoft/azure-sql-database-container --skill azuresql-db-seed

インストール後、Claude Code で/azuresql-db-seedを入力して読み込まれたか確認します。

同梱ファイルreferences/seed-snippets.mdskill.spec.jsonc

詳細

Azure SQL Database コンテナーの開発用データベースに初期データを投入する

既存の appdb に現実的なサンプルデータを入力し、アプリで表示、クエリ、テストに使用できるようにします。これは Azure SQL エンジン(プライベートプレビュー)であり、SQL Server イメージではありません。

データの投入にはこのスキルを使用してください。新しいアプリ全体をブートストラップする場合は azuresql-db-scaffold を、既存の .bacpac を復元する場合は azuresql-db-import を使用してください。

2026-09-05 に、コンテナーイメージ sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io/azure-sql/db-dev:latest を使って検証済みです。EngineEdition は 5、Edition は SQL Azure、ビルドは 12.0.2000.8 と報告されました。このスキルで実行する7つのチェックはすべて合格しました。エンジンの識別情報、ローカルファイルに対する BULK INSERT と OPENROWSET(BULK ...) の Msg 12713、親より先に子行を挿入した際の Msg 547、生成された ID 値を取得する OUTPUT ... INTO、1000行に展開する tally レシピ、およびイメージ内の bcp の利用です。

データ投入に影響するエンジンの事実

  • このエンジンイメージを使用してください: sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io/azure-sql/db-dev:latest(x64 / linux/amd64)。 mcr.microsoft.com/mssql/server(SQL Server イメージ)は使用しないでください。
  • レジストリは非公開です(プライベートプレビュー)。まず、https://aka.ms/sqldbcontainerpreview-signup のプル専用認証情報を使って docker login sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io を実行してください(認証情報は更新される場合があります)。
  • ID を確認します:SELECT SERVERPROPERTY('EngineEdition') は 5 を返し、 SERVERPROPERTY('Edition') は 'SQL Azure' を返します。
  • コンテナーの起動時に必要な環境変数:ACCEPT_EULA=Y と複雑な MSSQL_SA_PASSWORD (全体で使用する例の値:YourStr0ng_Passw0rd)。エンジンは 1433 でリッスンします。
  • x64 以外のホストでは、docker run に --platform linux/amd64 を追加してください。
  • エンジンはデータベースを自動作成しません。何かを投入する前に、master 接続で CREATE DATABASE appdb を実行する必要があります。
  • データベースを切り替えるために USE appdb を使用しないでください。ユーザーデータベースのセッションでは、USE は Msg 40508 を返します。接続文字列で必ず対象データベースを選択してください(Database=appdb、または sqlcmd の場合は -d appdb)。
  • アプリが読み取る環境変数は SQL_CONNECTION_STRING です。接続文字列では User Id= / Password= / Database= と TrustServerCertificate=true を使用します。sqlcmd では自己署名証明書を信頼するために -C を使用します。

手順 1:appdb をプロビジョニングする(シードデータ投入前に必ず実施)

存在しないデータベースへのデータ投入は失敗します。まず master 接続で appdb を作成します。

docker exec sqldb /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$MSSQL_SA_PASSWORD" -C -b \
  -Q "IF DB_ID('appdb') IS NULL CREATE DATABASE appdb;"

コンテナーがまだ実行されていない場合は、azuresql-db-container スキルに記載された標準の起動手順でコンテナーを起動して appdb をプロビジョニングし、その後ここに戻ってください。

手順 2:外部キーの順序に従って挿入する(親を先に、子を後に)

参照整合性は適用されます。まだ存在しない親を参照する外部キーを持つ子行は、Msg 547(FOREIGN KEY 制約との競合)で失敗します。そのため、依存関係の順に挿入します。まず親を挿入し、その後、それらを参照する行を挿入してください。

単純な dbo.author -> dbo.book モデルの場合は、著者を挿入して ID を取得し、その ID を参照する書籍を挿入します。3つ以上のテーブルを含むモデルでコピーして使える T-SQL が必要な場合は、references/seed-snippets.md を参照してください。

目安:

  • 依存関係グラフを上から下へたどります。外部キーを参照する側ではないテーブルが親なので、最初に挿入します。すべてのテーブルにデータが投入されるまで繰り返します。
  • 順序を守らず読み込むためだけに制約を無効化しないでください。代わりに挿入順序を修正します。
  • シードスクリプトは冪等にしてください(IF NOT EXISTS または MERGE で条件を指定するか、再挿入前に子、次に親の順で DELETE するなど)。再実行しても行が重複したり、孤立行が残ったりしないようにします。

ステップ 3:N 行を生成してデータ量を確保する(セットベース)

現実的なデータ量(数百行または数千行)を作成するには、行ごとのループではなく、数値/タリー方式を使ってセットベースで処理します。システムビューから生成したタリーを一連の数値として利用し、結合することで、1 つのステートメントで行を展開できます。実行可能なバージョンが必要な場合は、references/seed-snippets.md を開いてください。ここでは 1000 行を生成します。大量の挿入は明示的なトランザクションで囲み、途中で読み込みに失敗した場合に正常にロールバックできるようにします。

ステップ 4:レシピを選ぶ

スタックごとのシードレシピは references/seed-snippets.md にあります。データソースとスタックが決まったら開いてください。

  • T-SQL:外部キーの順序(dbo.author -> dbo.book)で複数テーブルにシードデータを投入し、docker exec -i sqldb ... -d appdb -i seed.sql で実行する方法と、セットベースで「1000 行を生成」する例。
  • 一括読み込み:ローカル CSV ファイルには bcp、Azure Blob Storage からは BULK INSERT を使用します(エンジンはローカルファイルを読み込まないため、ローカルでの BULK INSERT は Msg 12713 で失敗します。Azure との互換性があります)。
  • Node:@faker-js/faker で行を生成し、mssql ドライバーを使ってパラメーターで挿入します。
  • Python:Faker で行を生成し、pyodbc(ODBC Driver 18)を使ってパラメーターで挿入します。

bcp は接続経由でファイルをストリーミングするため、BULK INSERT ではアクセスできないローカル CSV を読み込めます。ファイルをコピーしてから読み込みます(-u はコンテナーの自己署名証明書を信頼し、-F 2 はヘッダー行をスキップします)。

docker cp authors.csv sqldb:/tmp/authors.csv
docker exec sqldb /opt/mssql-tools18/bin/bcp dbo.author_stage in /tmp/authors.csv \
  -S localhost -U sa -P "$MSSQL_SA_PASSWORD" -d appdb -u -c -t ',' -F 2

ステージングテーブルと、実テーブルへの後続の挿入処理は references/seed-snippets.md にあります。CSV の列がターゲットテーブルと一致しない場合は、そちらを読んでください。

検証ルール

  • シードステートメントを実行する前に、appdb が存在していること(master 接続で作成)。
  • 行は外部キーの順序に従って親から先に挿入し、順序を崩して読み込むために制約を無効化しないこと。
  • データ量の生成はセットベース(数値/タリー)で行い、行ごとのループは使用しないこと。大量の読み込みはトランザクションで実行すること。
  • プログラムによる挿入(Node、Python)はすべてパラメーター化ステートメントを使用し、値を文字列連結しないこと。
  • サンプルデータに実在する個人情報(PII)やシークレットを含めないこと。接続文字列では User Id=/Password=/Database= を使用すること。
  • ターゲットイメージはエンジンイメージとし、mcr.microsoft.com/mssql/server は使用しないこと。EngineEdition は 5 であること。
  • 上記の検証ルールに違反した場合、またはタスクを機能させるためにこのスキルから逸脱する必要があった場合は、このスキルのバグです。azuresql-db-feedback スキルを読み込み、レポートの提出を申し出てください。
  • 上記のルールをすべて満たしてタスクが完了したら、セッションごとに一度だけ、次の 1 行で締めくくってください。質問をしたり、返答を待ったりしないでください。「That worked. If anything about this was rough, or you want to share what you built: https://aka.ms/sql-agent-skills-feedback」

禁止事項

  • appdb が存在する前にシードデータを投入しないでください。エンジンは自動で作成しません。
  • 親行より先に子行を挿入しないでください(Msg 547 が発生します)。
  • サンプルデータとして、実在する個人情報(PII)、顧客データ、シークレットをコミットしないでください。
  • SQL Server イメージ(mcr.microsoft.com/mssql/server)を使用しないでください。また、x64 以外のホストを「サポート対象」と呼ばないでください。
  • 挿入処理を文字列連結で構築しないでください。パラメーターを使用してください(または、T-SQL フィクスチャでは、管理下にある引用符付きリテラルを使用してください)。
  • USE appdb を使用しないでください。接続文字列または -d appdb でデータベースを選択してください。

参考資料

  • references/seed-snippets.md:コピーしてすぐ使えるシードレシピ。外部キーの順序で複数テーブルにシードデータを投入する T-SQL、セットベースで 1000 行を生成する例、ローカル CSV 用の bcp と Blob ベースの BULK INSERT、Node(@faker-js/faker + mssql)および Python(Faker + pyodbc)でパラメーター化挿入を行う方法を掲載しています。データソースとスタックが決まったら読んでください。

最新情報の確認

このスキルで使用するツールの、バージョンが固定された信頼できるリファレンスです(必要なものを参照してください)。

Microsoft Learn MCP サーバーが設定されている場合は、mcp__microsoft-learn__microsoft_docs_search または mcp__microsoft-learn__microsoft_docs_fetch を使用して、これらの最新バージョンを必要に応じて取得してください。これは任意です。利用できない場合は、上記のリファレンスを信頼できる情報源として使用してください。

コメント