Share via


クライアント側の XML 書式設定 (SQLXML 4.0)

ここでは、クライアント側の XML 書式設定に関する情報を提供します。クライアント側の書式設定とは、中間層での XML の書式設定を指します。

ms171901.note(ja-jp,SQL.90).gifメモ :
ここでは、クライアント側での FOR XML 句の使用に関する追加情報を提供します。ここでは、FOR XML 句について理解していることを前提としています。FOR XML の詳細については、「FOR XML を使用した XML の構築」を参照してください。

重要 クライアント側の FOR XML 機能で新しい xml データ型を使用するには、クライアントで SQLOLEDB プロバイダではなく SQL Native Client (SQLNCLI) データ プロバイダを常に使用する必要があります。SQLNCLI は最新バージョンの SQL Server プロバイダであり、SQL Server 2005 で導入されたデータ型が完全に認識されます。クライアント側の FOR XML に SQLOLEDB プロバイダを使用すると、xml データ型は文字列として扱われます。

クライアント側での XML ドキュメントの書式設定

クライアント アプリケーションで次のクエリを実行するとします。

SELECT FirstName, LastName
FROM   Person.Contact
FOR XML RAW

この場合、クエリの次の部分だけがサーバーに送信されます。

SELECT FirstName, LastName
FROM   Person.Contact

サーバーではクエリが実行され、FirstName 列と LastName 列を含む行セットがクライアントに返されます。次に、中間層で、行セットに FOR XML 変換が適用され、XML の書式設定がクライアントに返されます。

同様に、XPath クエリを実行すると、サーバーからクライアントに行セットが返され、クライアント側で行セットに FOR XML EXPLICIT 変換が適用されて、目的の XML の書式設定が生成されます。

次の表は、クライアント側の FOR XML で指定できるモードです。

クライアント側の FOR XML のモード コメント

RAW

クライアント側とサーバー側のどちらの FOR XML で指定しても、同じ結果が生成されます。

NESTED

サーバー側で FOR XML AUTO モードを指定した場合と同様です。

EXPLICIT

サーバー側で FOR XML EXPLICIT モードを指定した場合と同様です。

ms171901.note(ja-jp,SQL.90).gifメモ :
AUTO モードを指定してクライアント側の XML 書式設定を要求すると、クエリ全体がサーバーに送信され、XML 書式設定はサーバー側で実行されます。このモードは便利ですが、NESTED モードを指定した場合は、生成される XML ドキュメント内の要素名としてベース テーブル名が返される点に注意してください。使用するアプリケーションによっては、ベース テーブル名が必要です。たとえば、ストアド プロシージャを実行し、結果のデータを Microsoft .NET Framework のデータセットに読み込んだ後で、テーブルのデータを更新する DiffGram を生成するとします。この場合、ベース テーブル情報が必要となるため、NESTED モードを使用する必要があります。

クライアント側の XML 書式設定の利点

次に、クライアント側の XML 書式設定の利点をいくつか紹介します。

サーバーに単一の行セットを返すストアド プロシージャがある場合、クライアント側の FOR XML 変換を要求して XML を生成できる。

たとえば、次のストアド プロシージャを考えてみます。このプロシージャでは、従業員の姓と名前が AdventureWorks データベースの Person.Contact テーブルから返されます。

IF EXISTS (SELECT name FROM sysobjects
   WHERE name = 'GetContacts' AND type = 'P')
   DROP PROCEDURE GetContacts
GO
CREATE PROCEDURE GetContacts
AS
    SELECT   FirstName, LastName
    FROM     Person.Contact

このストアド プロシージャを、次のサンプル XML テンプレートで実行します。このとき、FOR XML 句をストアド プロシージャ名の後に指定します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <sql:query client-side-xml="1">
    EXEC GetContacts FOR XML NESTED
  </sql:query>
</ROOT>

テンプレートでは client-side-xml 属性が 1 (true) に設定されているため、ストアド プロシージャはサーバーで実行され、サーバーで返された 2 列の行セットが中間層で XML に変換されて、クライアントに返されます。次に示すのは結果の一部です。

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Contact FirstName="Gustavo" LastName="Achong" /> 
  <Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
ms171901.note(ja-jp,SQL.90).gifメモ :
SQLXMLOLEDB プロバイダ、または SQLXML マネージ クラスを使用している場合は、ClientSideXml プロパティを使用してクライアント側の XML 書式設定を要求できます。

ワークロードをより適切に分散できる。

クライアントで XML 書式設定を行うため、サーバーとクライアント間でワークロードがより適切に分散され、サーバーで他の処理を実行できるようになります。

クライアント側の XML 書式設定のサポート

クライアント側の XML 書式設定機能をサポートするため、SQLXML では次のコンポーネントが提供されます。

  • SQLXMLOLEDB プロバイダ
  • SQLXML マネージ クラス
  • 拡張 XML テンプレートのサポート
  • SqlXmlCommand.ClientSideXml プロパティ
    SQLXML マネージ クラスのこのプロパティを true に設定すると、クライアント側の書式設定を指定できます。

拡張 XML テンプレートのサポート

SQL Server 2005 では、XML テンプレートが拡張され、client-side-xml 属性が追加されました。この属性を true に設定すると、XML がクライアント側で書式設定されます。このテンプレート属性は、SQLXMLOLEDB プロバイダ固有の ClientSideXML プロパティと機能的に同じであることに注意してください。

ms171901.note(ja-jp,SQL.90).gifメモ :
SQLXMLOLEDB プロバイダを使用する ADO アプリケーションで XML テンプレートを実行し、テンプレートとプロバイダの ClientSideXML プロパティの両方に client-side-xml 属性を指定している場合は、テンプレートで指定した値が優先されます。

参照

関連項目

クライアント側とサーバー側の XML 書式設定のアーキテクチャ (SQLXML 4.0)
FOR XML のセキュリティに関する問題 (SQLXML 4.0)
SQLXML 4.0 での xml データ型のサポート
SQLXML マネージ クラス
クライアント側とサーバー側の XML 書式設定 (SQLXML 4.0)
SqlXmlCommand オブジェクト (SQLXML マネージ クラス)

その他の技術情報

FOR XML を使用した XML の構築
xml データ型

ヘルプおよび情報

SQL Server 2005 の参考資料の入手