azuresql-db-seed について
既存の Azure SQL Database コンテナーにサンプルデータを投入するスキルです。外部キー順の挿入、集合ベースの生成、一括ロード、パラメーター化挿入を扱い、開発やテストの準備に利用できます。
主な機能
- 01外部キー順でのデータ挿入
- 02tally 方式によるデータ生成
- 03bcp によるローカル CSV のロード
- 04Node と Python の挿入レシピ
活用シーン
- 01開発用データベースへのサンプルデータ投入
- 02数百から数千行のテストデータ生成
- 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)でパラメーター化挿入を行う方法を掲載しています。データソースとスタックが決まったら読んでください。
最新情報の確認
このスキルで使用するツールの、バージョンが固定された信頼できるリファレンスです(必要なものを参照してください)。
- BULK INSERT (T-SQL):データファイルをテーブルに一括ロードします。
- bcp utility:コマンドラインからデータを一括コピーして入出力します。
- SqlConnection connection string keywords:キーワード一覧の全項目を確認できます。
Microsoft Learn MCP サーバーが設定されている場合は、mcp__microsoft-learn__microsoft_docs_search または mcp__microsoft-learn__microsoft_docs_fetch を使用して、これらの最新バージョンを必要に応じて取得してください。これは任意です。利用できない場合は、上記のリファレンスを信頼できる情報源として使用してください。