このトピックでは、クライアント側の XML 書式設定について説明します。 クライアント側の書式設定は、中間層での XML の書式設定を指します。
注
このトピックでは、クライアント側での FOR XML 句の使用に関する追加情報を提供し、FOR XML 句について既に理解していることを前提としています。 FOR XML の詳細については、「FOR XML を 使用した XML の構築」を参照してください。
大事な 新しい xml
データ型でクライアント側 FOR XML 機能を使用するには、クライアントは常に SQLOLEDB プロバイダーではなく SQL Server Native Client (SQLNCLI11) データ プロバイダーを使用する必要があります。 SQLNCLI11は SQL Server プロバイダーの最新バージョンであり、SQL Server 2005 で導入されたデータ型を完全に理解しています。 SQLOLEDB プロバイダーを使用したクライアント側 FOR XML の動作では、 xml
データ型が文字列として扱われます。
クライアント側での XML ドキュメントの書式設定
クライアント アプリケーションが次のクエリを実行する場合:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
...クエリのこの部分のみがサーバーに送信されます。
SELECT FirstName, LastName
FROM Person.Contact
サーバーはクエリを実行し、行セット (FirstName と LastNamecolumns を含む) をクライアントに返します。 その後、中間層は FOR XML 変換を行セットに適用し、XML 形式をクライアントに返します。
同様に、XPath クエリを実行すると、サーバーはクライアントに行セットを返し、FOR XML EXPLICIT 変換がクライアントの行セットに適用され、目的の XML 書式が生成されます。
次の表は、クライアント側 FOR XML で指定できるモードを示しています。
クライアント側 FOR XML モード | コメント |
---|---|
未加工 | クライアント側またはサーバー側の FOR XML で指定すると、同じ結果が生成されます。 |
ネスト された | サーバー側の FOR XML AUTO モードに似ています。 |
明確な | サーバー側 FOR XML EXPLICIT モードに似ています。 |
注
AUTO モードを指定し、クライアント側の XML 書式設定を要求すると、クエリ全体がサーバーに送信されます。つまり、XML の書式設定はサーバー上で行われます。 これは便宜上行われますが、NESTED モードでは、生成される XML ドキュメントの要素名として基本テーブル名が返されることに注意してください。 一部のアプリケーションでは、ベース テーブル名が必要な場合があります。 たとえば、ストアド プロシージャを実行し、結果のデータをデータセット (Microsoft .NET Framework) に読み込み、後で DiffGram を生成してテーブル内のデータを更新することができます。 このような場合は、ベース テーブル情報が必要であり、NESTED モードを使用する必要があります。
クライアント側の XML 書式設定の利点
クライアントで XML を書式設定する利点を次に示します。
サーバー上に 1 つの行セットを返すストアド プロシージャがある場合は、クライアント側 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>
テンプレートでは クライアント側 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>
注
SQLXMLOLEDB プロバイダーまたは SQLXML マネージド クラスを使用している場合は、 ClientSideXml
プロパティを使用してクライアント側の XML 書式を要求できます。
ワークロードのバランスが取れています。
クライアントは XML 形式を行うため、ワークロードはサーバーとクライアントの間でバランスが取られ、サーバーは他の処理を実行できるようになります。
クライアント側の XML 書式設定のサポート
クライアント側の XML 書式設定機能をサポートするために、SQLXML には次のものが用意されています。
SQLXMLOLEDB プロバイダー
SQLXML マネージド クラス
拡張 XML テンプレートのサポート
SqlXmlCommand.ClientSideXml プロパティ
SQLXML マネージド クラスのこのプロパティを true に設定することで、クライアント側の書式設定を指定できます。
拡張 XML テンプレートのサポート
SQL Server 2005 以降、SQL Server の XML テンプレートは 、クライアント側 xml 属性を追加して拡張されました。 この属性が true に設定されている場合、XML はクライアントで書式設定されます。 このテンプレート属性は、SQLXMLOLEDB プロバイダー固有の ClientSideXML プロパティと機能が同じであることに注意してください。
注
SQLXMLOLEDB プロバイダーを使用する ADO アプリケーションで XML テンプレートを実行し、テンプレートに クライアント側 xml 属性とプロバイダー ClientSideXML プロパティの両方を指定した場合、テンプレートで指定された値が優先されます。
こちらもご覧ください
クライアント側およびサーバー側の XML 書式設定のアーキテクチャ (SQLXML 4.0)
FOR XML (SQL Server)
FOR XML のセキュリティに関する考慮事項 (SQLXML 4.0)
SQLXML 4.0 での xml データ型のサポート
SQLXML マネージド クラス
クライアント側とサーバー側の XML 書式設定 (SQLXML 4.0)
SqlXmlCommand オブジェクト (SQLXML マネージド クラス)
XML データ (SQL Server)