左側に SQL を貼り付けて 「変換」 を押してください — こちらで XML にしますSQL を貼り付け

このツールの役割

ベンダー向け、レガシーな SOAP エンドポイント、または XML をまだ前提にしている古い ETL ジョブのために、データベースの行を XML ファイルに書き出さなければならない場面ってありますよね。クエリツールを開いて SELECT を流し、エクスポートして、出力を手で整えて、日付フォーマットと戦う… あのルーティンです。ここに SQL を貼り付ければ、整形済みの XML が一発で返ってきます。複数行の INSERT、スキーマだけの CREATE TABLE、その両方が混ざっていても結果は同じです。

このコンバーターは SQL をデータベースと同じ読み方で解釈します。複数行 INSERT の各行はひとつの要素になり、各カラムはそのカラム名を持つ子要素になります。NULL 値は空要素になるので、すべての行の形が同じに保たれます。日付っぽいリテラル — '2024-01-15 10:30:00'DATE '2024-01-15'、生のタイムスタンプ — は ISO-8601 文字列として出力されるので、Java、.NET、Python、その他どこのパーサーでもそのまま読み込めます。数値型は精度を保ち、真偽値は true/false として出てきます。

public.ordersdbo.Orders のようなスキーマ修飾付きの名前は、XML の要素名にドットを含められないので、要素名では ordersOrders だけに切り落とされます。クォート付き識別子、MySQL のバッククォート、PostgreSQL のダブルクォート名も同じように扱われます。CREATE TABLE を投げ込むと、そのスキーマ用の XML スケルトン — カラムごとの空要素 — が返ってきて、XSD のたたき台やサンプル payload に便利です。同じクエリに複数のテーブル? 出力には書いた順に、それぞれが独立したセクションとして並びます。

使い方

3 ステップ。1 行貼ろうと 1000 行貼ろうと同じ手順です。

1

SQL を貼り付ける (またはサンプルを試す)

左側のエディタに SQL をそのまま入れてください。1 行でも複数行でも INSERT 文、CREATE TABLE 定義、その混在 — すべて OK です。現実的な複数テーブル注文ダンプがどう見えるか確認したいときは サンプルを読み込む を押してください。

コメント (--/* ... */)、スキーマ接頭辞、方言固有のクォート (MySQL のバッククォート、SQLite のダブルクォート、SQL Server の角括弧)、末尾のセミコロンはすべてそのまま通ります — 事前にクリーンアップする必要はありません。

2

「変換」を押す

緑色の 変換 ボタンをクリックしてください。ツールは SQL をパースし、複数行インサートの各行を展開し、日付と真偽値を正規化して、XML を一発で組み立てます。処理中は短いローディング表示が出ます。

3

XML をコピー

右側のパネルに、標準準拠の XML パーサー が受け付けられる、インデント付きの整形済み XML が表示されます。そのまま SOAP ボディ、テストフィクスチャ、ETL のドロップフォルダなど、必要な場所にコピーしてください。

実際に役立つ場面

データベースのシードフィクスチャ

シードスクリプトの <code>INSERT</code> がたくさんあって、同じデータを統合テストやモックサーバー向けに XML で欲しい — よくある話です。インサートを貼り付けて XML を持っていけば完了。1 行ずつ手編集する必要はありません。

SOAP・レガシーエンタープライズ連携

古いパートナーシステムが、データベース行を反映した XML ボディを期待しているケース。行を 1 行ずつ文字列化する中間コードを書かずに、INSERT を直接貼り付けて XML を SOAP リクエストにコピーできます。

監査・コンプライアンス向けエクスポート

規制当局や監査人は今でも XML が大好きです。INSERT したばかりの行 (あるいはログクエリで拾った行) を、エクスポートパイプラインを立ち上げずに、署名可能でアーカイブしやすい XML 文書に変えられます。

XML ベースの ETL パイプライン

SSIS、Informatica、または自作の XSLT パイプラインのような ETL ツールに食わせますか? 本番バッチが組まれる前に、上流の SQL サンプルを XML に変換して変換処理のプロトタイプを作れます。

よくある質問

複数行 INSERT はどう扱われますか?

複数行の INSERT INTO orders (...) VALUES (...), (...), (...); は、テーブル用のコンテナ要素ひとつに、行ごとに子要素ひとつずつ — 各子要素はテーブル名の単数形 (つまり orders の行は <orders> ラッパーの中の <order> 要素) で並びます。すべての行は同じカラム子要素を、カラムリストと同じ順で持つので、行数が数百あっても出力は予測可能です。

NULL 値はどうなりますか?

VALUES リスト内の NULL は、捨てられるのではなく空要素 (例: <middle_name/>) になります。これで各行の形がそろうので、カラムを位置で走査する下流の処理や、サンプルから XSD を起こす処理にとって重要です。xsi:nil="true" が必要なら、出力を小さな XSLT で包むか後処理してください — コンバーター自身は可搬性のためにシンプルな空要素を維持します。

日付やタイムスタンプは ISO-8601 になりますか?

はい。'2024-01-15 10:30:00'DATE '2024-01-15'TIMESTAMP '2024-01-15 10:30:00+00'、MySQL 風の '2024-01-15T10:30:00' といった SQL リテラルはすべて ISO-8601 文字列として出てきます (タイムゾーンがあれば 2024-01-15T10:30:00Z、なければ 2024-01-15T10:30:00)。主要言語の XML スタックはどれもこの形式をきれいにパースできます。

行なしの CREATE TABLE だけを貼ってもいいですか?

はい。スキーマだけの CREATE TABLE は XML スケルトンを生成します: カラムごとにひとつの空要素が、宣言された順に並びます。サンプル payload、XSD ドラフト、手で埋めるテストフィクスチャのスタート地点として便利です。CREATE TABLE のデータ型はヒントとして読まれますが (日付は日付、数値は数値として扱われます)、出力の空要素自体に型情報は載りません。

クエリに複数テーブルがある場合は?

INSERTCREATE TABLE ステートメントは、書いた順に出力の最上位セクションをそれぞれ生成します。orders を作り、3 件の orders を入れ、その後 6 件の order_items を入れる混在スクリプトは、3 つのテーブルセクションを含むドキュメントになり、それぞれがコンテナ要素で包まれます。パーサーは結合や関連づけを試みず — 貼り付けた構造をそのまま保ちます。

public.orders や dbo.Orders のようなスキーマ接頭辞は取り除かれますか?

はい。XML の要素名にはドットを含められないので、public.orders<orders> に、dbo.Orders<Orders> に、my_schema."User Table"<User_Table> になります (XML 名はスペースも含められないので、スペースはアンダースコアに変わります)。MySQL のバッククォート、PostgreSQL のダブルクォート、SQL Server の角括弧もすべて同じように取り除かれます。

一緒に使えるツール

SQL to XML はパズルの 1 ピースです。こちらと相性がいいです: