Share via


XML 一括読み込みの概要 (SQLXML 4.0)

適用対象:SQL ServerAzure SQL Database

XML 一括読み込みはスタンドアロン COM オブジェクトであり、半構造化 XML データを Microsoft SQL Server テーブルに読み込むことができます。

INSERT ステートメントと OPENXML 関数を使用して、SQL Server データベースに XML データを挿入できますが、大量の XML データを挿入する必要がある場合は、一括読み込みユーティリティのパフォーマンスが向上します。

XML 一括読み込みオブジェクト モデルの Execute メソッドは、次の 2 つのパラメーターを受け取ります。

  • 注釈付き XML Schema Definition (XSD) または XML-Data Reduced (XDR) スキーマ。 XML 一括読み込みユーティリティでは、このスキーマで指定されたマッピング スキーマと注釈が解釈され、XML データを挿入する SQL Server テーブルが特定されます。

  • XML ドキュメント、またはドキュメント フラグメント (単一の最上位要素がないドキュメント)。 XML 一括読み込みで読み込むことができるファイル名またはストリームを指定できます。

XML 一括読み込みではマッピング スキーマが解釈されて、XML データを挿入するテーブルが特定されます。

次のSQL Server機能に精通していることを前提としています。

XML データのストリーミング

ソースの XML ドキュメントは大きい可能性があるため、一括読み込み処理では、メモリにドキュメント全体は読み込まれません。 代わりに、XML 一括読み込みでは XML データがストリームとして解釈され読み取られます。 ユーティリティはデータを読み取ると、データベース テーブルを識別し、XML データ ソースから適切なレコードを生成し、挿入のためにレコードをSQL Serverに送信します。

たとえば、次のソース XML ドキュメントは、Customer> 要素と Order 子要素で構成されます<><

<Customer ...>  
    <Order.../>  
    <Order .../>  
     ...  
</Customer>  
...  

XML 一括読み込みが Customer> 要素を<読み取ると、Customertable のレコードが生成されます。 /Customer> 終了タグを<読み取ると、XML 一括読み込みによって、そのレコードがSQL Serverのテーブルに挿入されます。 同様に、Order> 要素を<読み取ると、XML 一括読み込みによって Ordertable のレコードが生成され、/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 プロパティが TRUE に設定されている場合、XML 一括読み込みは独自のトランザクション コンテキストで動作します。 たとえば、XML 一括読み込みでは自身のトランザクションが開始され、必要に応じてコミットまたはロールバックが行われます。

ConnectionCommand プロパティが既存の接続オブジェクトとの接続を設定し、Transaction プロパティが TRUE に設定されている場合、成功または失敗した場合、XML 一括読み込みでは COMMIT ステートメントまたは ROLLBACK ステートメントが発行されません。 エラーが発生した場合、XML 一括読み込みでは適切なエラー メッセージが返されます。 COMMIT または ROLLBACK ステートメントを発行するかどうかは、一括読み込みを実行したクライアントで決定されます。 XML 一括読み込みに使用される接続オブジェクトは、ICommand 型であるか、ADO コマンド オブジェクトである必要があります。

SQLXML 4.0 では、Transaction プロパティを FALSE に設定して ConnectionObject を使用することはできません。 ConnectionObject では、渡されたセッションで複数の IRowsetFastLoad インターフェイスを開くことができず、非トランザクション モードはサポートされていません。