クライアント側の XML 書式設定 (SQLXML 4.0)
ここでは、クライアント側の XML 書式設定に関する情報を提供します。クライアント側の書式設定とは、中間層での XML の書式設定を指します。
注 |
---|
ここでは、クライアント側での FOR XML 句の使用に関する追加情報を提供します。ここでは、FOR XML 句について理解していることを前提としています。FOR XML の詳細については、「FOR XML を使用した XML の構築」を参照してください。 |
重要 クライアント側の FOR XML 機能で新しい xml データ型を使用するには、クライアントで SQLOLEDB プロバイダーではなく SQL Server Native Client (SQLNCLI10) データ プロバイダーを常に使用する必要があります。SQLNCLI10 は、最新バージョンの SQL Server プロバイダーであり、SQL Server 2005 で導入されたデータ型を完全に認識します。クライアント側の FOR XML に SQLOLEDB プロバイダーを使用すると、xml データ型は文字列として扱われます。
クライアント側での XML ドキュメントの書式設定
クライアント アプリケーションで次のクエリを実行するとします。
SELECT FirstName, LastName
FROM Person.Person
FOR XML RAW;
この場合、クエリの次の部分だけがサーバーに送信されます。
SELECT FirstName, LastName
FROM Person.Person
サーバーではクエリが実行され、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 モードを指定した場合と同様です。 |
注 |
---|
AUTO モードを指定してクライアント側の XML 書式設定を要求すると、クエリ全体がサーバーに送信され、XML 書式設定はサーバー側で実行されます。このモードは便利ですが、NESTED モードを指定した場合は、生成される XML ドキュメント内の要素名としてベース テーブル名が返される点に注意してください。使用するアプリケーションによっては、ベース テーブル名が必要です。たとえば、ストアド プロシージャを実行し、結果のデータを Microsoft .NET Framework のデータセットに読み込んだ後で、テーブルのデータを更新する DiffGram を生成するとします。この場合、ベース テーブル情報が必要となるため、NESTED モードを使用する必要があります。 |
クライアント側の XML 書式設定の利点
次に、クライアント側の XML 書式設定の利点をいくつか紹介します。
サーバーに単一の行セットを返すストアド プロシージャがある場合、クライアント側の FOR XML 変換を要求して XML を生成できる。
たとえば、次のストアド プロシージャを考えてみます。このプロシージャでは、姓と名が AdventureWorks2008R2 データベースの Person.Person テーブルから返されます。
IF EXISTS (SELECT name FROM sys.objects
WHERE name = 'GetContacts' AND type = 'P')
DROP PROCEDURE GetContacts;
GO
CREATE PROCEDURE GetContacts
AS
SELECT FirstName, LastName
FROM Person.Person;
このストアド プロシージャを、次のサンプル 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.Person FirstName="Gustavo" LastName="Achong" />
<Person.Person FirstName="Catherine" LastName="Abel" />
</ROOT>
注 |
---|
SQLXMLOLEDB プロバイダー、または SQLXML マネージ クラスを使用している場合は、ClientSideXml プロパティを使用してクライアント側の XML 書式設定を要求できます。 |
ワークロードをより適切に分散できる。
クライアントで XML 書式設定を行うため、サーバーとクライアント間でワークロードがより適切に分散され、サーバーで他の処理を実行できるようになります。
クライアント側の XML 書式設定のサポート
クライアント側の XML 書式設定機能をサポートするため、SQLXML では次のコンポーネントが提供されます。
SQLXMLOLEDB プロバイダー
SQLXML マネージ クラス
拡張 XML テンプレートのサポート
SqlXmlCommand.ClientSideXml プロパティ
SQLXML マネージ クラスのこのプロパティを true に設定すると、クライアント側の書式設定を指定できます。
拡張 XML テンプレートのサポート
SQL Server 2005 以降は、SQL Server の XML テンプレートが拡張され、client-side-xml 属性が追加されました。この属性を true に設定すると、XML がクライアント側で書式設定されます。このテンプレート属性は、SQLXMLOLEDB プロバイダー固有の ClientSideXML プロパティと機能的に同じであることに注意してください。
注 |
---|
SQLXMLOLEDB プロバイダーを使用する ADO アプリケーションで XML テンプレートを実行し、テンプレートとプロバイダーの ClientSideXML プロパティの両方に client-side-xml 属性を指定している場合は、テンプレートで指定した値が優先されます。 |