XML 一括読み込みの概要 (SQLXML 4.0)
XML 一括読み込みはスタンドアロン COM オブジェクトであり、これを使用すると、半構造化された XML データを Microsoft SQL Server テーブルに読み込むことができます。
INSERT ステートメントと OPENXML 関数を使用すれば、XML データを SQL Server データベースに挿入できますが、大量の XML データを挿入する必要があるときには、一括読み込みユーティリティを使用すると効率的です。
XML 一括読み込みオブジェクト モデルの Execute メソッドでは、次の 2 つのパラメータが使用されます。
- 注釈付き XML Schema Definition (XSD) または XML-Data Reduced (XDR) スキーマ。XML 一括読み込みユーティリティでは、このスキーマで指定されたマッピング スキーマと注釈が解釈され、XML データを挿入する SQL Server テーブルが特定されます。
- XML ドキュメント、またはドキュメント フラグメント (単一の最上位要素がないドキュメント)。XML 一括読み込みで読み込むことができるファイル名またはストリームを指定できます。
XML 一括読み込みではマッピング スキーマが解釈されて、XML データを挿入するテーブルが特定されます。
ユーザーは、次の SQL Server 機能について理解していることを前提としています。
- 注釈付き XSD および XDR スキーマ。注釈付き XSD スキーマの詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」を参照してください。注釈付き XDR スキーマの詳細については、「注釈付き XDR スキーマ (SQLXML 4.0 では非推奨)」を参照してください。
- Transact-SQL の BULK INSERT ステートメント、bcp ユーティリティなどの SQL Server 一括挿入メカニズム。詳細については、「BULK INSERT (Transact-SQL)」および「bcp ユーティリティ」を参照してください。
XML データのストリーミング
ソースの XML ドキュメントは大きい可能性があるため、一括読み込み処理では、メモリにドキュメント全体は読み込まれません。代わりに、XML 一括読み込みでは XML データがストリームとして解釈され読み取られます。データが読み取られるとき、このユーティリティではデータベース テーブルが特定され、XML データ ソースを基に適切なレコードが生成された後、そのレコードが挿入のため SQL Server に送信されます。
たとえば、次のソース XML ドキュメントは、<Customer> 要素と <Order> 子要素で構成されています。
<Customer ...>
<Order.../>
<Order .../>
...
</Customer>
...
XML 一括読み込みで <Customer> 要素が読み取られると、<Customer> テーブルにレコードが生成され、</Customer> 終了タグが読み取られると、そのレコードが SQL Server のテーブルに挿入されます。同様に、XML 一括読み込みで <Order> 要素が読み取られると、Order テーブルにレコードが生成され、</Order> 終了タグが読み取られると、そのレコードが SQL Server のテーブルに挿入されます。
トランザクション モードとトランザクション以外のモードでの XML 一括読み込みの操作
XML 一括読み込みは、トランザクション モードまたはトランザクション以外のモードで操作できます。パフォーマンスは通常、トランザクション以外のモードで一括読み込みを実行する場合 (Transaction プロパティが FALSE に設定されている場合)、および次のいずれかの条件に当てはまる場合に最適になります。
- データの一括読み込みの対象テーブルが空で、インデックスが作成されていない。
- テーブルにデータと一意のインデックスが格納されている。
トランザクション以外のモードで一括読み込みを実行する場合は、一括読み込み中に問題が発生したとしてもロールバックは保証されません (ただし、部分ロールバックは実行されることがあります)。トランザクション以外のモードでの一括読み込みは、データベースが空の場合に適しています。この場合、問題が発生したらデータベースの内容を消去して、XML 一括読み込みを再実行できます。
メモ : |
---|
トランザクション以外のモードの場合、XML 一括読み込みでは既定の内部トランザクションが使用され、そのトランザクションがコミットされます。Transaction プロパティが TRUE に設定されている場合、XML 一括読み込みでこのトランザクションのコミットは実行されません。 |
Transaction プロパティが TRUE に設定されている場合、XML 一括読み込みではマッピング スキーマで特定されるテーブルごとに 1 つずつ一時ファイルが作成されます。ソース XML ドキュメントからのレコードは、最初に XML 一括読み込みによってこれらの一時ファイルに保存され、次に Transact-SQL BULK INSERT ステートメントによって一時ファイルから取得されて、対応するテーブルに保存されます。これらの一時ファイルの場所は、TempFilePath プロパティで指定できます。XML 一括読み込みで使用される SQL Server アカウントからは、このパスにアクセスできる必要があります。TempFilePath プロパティを指定しない場合は、TEMP 環境変数で指定されている既定のファイル パスを使用して一時ファイルが作成されます。
Transaction プロパティが既定の FALSE に設定されている場合、XML 一括読み込みでは OLE DB インターフェイス IRowsetFastLoad を介してデータの一括読み込みが実行されます。
ConnectionString プロパティで接続文字列が設定され、Transaction プロパティが TURE に設定されている場合、XML 一括読み込みは自身のトランザクション コンテキストで動作します。たとえば、XML 一括読み込みでは自身のトランザクションが開始され、必要に応じてコミットまたはロールバックが行われます。
ConnectionCommand プロパティで既存の接続オブジェクトとの接続が設定され、Transaction プロパティが TRUE に設定されている場合、XML 一括読み込みでは、成功時の COMMIT や失敗時の ROLLBACK ステートメントは発行されません。エラーが発生した場合、XML 一括読み込みでは適切なエラー メッセージが返されます。COMMIT または ROLLBACK ステートメントを発行するかどうかは、一括読み込みを実行したクライアントで決定されます。XML 一括読み込みに使用される接続オブジェクトは、ICommand 型のオブジェクトであるか、ADO コマンド オブジェクトである必要があります。
SQLXML 4.0 では、Transaction プロパティが FALSE に設定された状態で ConnectionObject は使用できません。ConnectionObject が渡されるセッションでは複数の IRowsetFastLoad インターフェイスを開くことができないので、このオブジェクトでトランザクション以外のモードはサポートされません。