分散クエリを使用する場合のガイドライン

必要な OLE DB インターフェイスをプロバイダーがサポートしている限り、ここで説明する各クラスの Transact-SQL ステートメントを使用できます。

Transact-SQL ステートメント

Transact-SQL 言語のうち、リンク サーバーに基づく名前またはアドホック名を指定してアクセスされるリモート テーブルで使用できる言語のサブセットは次のとおりです。

  • 標準的な形式の SELECT select_list FROM 句 WHERE 句を含むすべてのクエリを使用できます。new_table_name がリモート テーブルを参照している場合、SELECT の INTO new_table_name 句は使用できません。

  • SELECT、INSERT、UPDATE、DELETE の各ステートメントでは、リモート テーブル内の列を 1 つの部分または 4 つの部分から構成されるテーブル名で修飾できません。リモート テーブルでは FROM 句で別名を指定して、その別名を使用して列名を修飾する必要があります。

  • クエリの対象がテーブル内の xml 以外の列であっても、xml 列のあるテーブルにはクエリを実行できません。

  • リモート テーブルのラージ オブジェクト (LOB) 列が SELECT ステートメントの select_list 内のアイテムとして指定されている場合、SELECT ステートメントで ORDER BY 句は使用できません。

  • IS NULL 述語と IS NOT NULL 述語でリモート テーブル内の LOB 列を参照することはできません。

  • 分散クエリに WHERE 句が指定されているときは、GROUP BY ALL を同時に指定することはできません。ただし、ALL なしで GROUP BY のみを指定することは可能です。

  • プロバイダーが INSERT ステートメントの OLE DB 要件を満たしている限り、リモート テーブルに対して INSERT ステートメントを使用できます。詳細については、「INSERT を使用するための OLE DB プロバイダの要件」を参照してください。

  • 分散クエリを使用して timestamp 列に NULL 定数を挿入することはできません。

  • 分散クエリでは、$IDENTITY と $ROWGUIDCOL はサポートされていません。リモート テーブルの ID 列には、明示的な値は挿入できません。

  • プロバイダーが、指定されたテーブルに対する OLE DB インターフェイス要件を満たしている場合、リモート テーブルに対して UPDATE ステートメントと DELETE ステートメントを使用できます。詳細については、「UPDATE と DELETE を使用するための OLE DB プロバイダの要件」を参照してください。

  • リモート テーブルを更新するための条件をプロバイダーが満たしている場合は、UPDATE ステートメントまたは DELETE ステートメント (UPDATE または DELETE remote_table WHERE CURRENT OF cursor_name) でリモート テーブルを指定するときに分散クエリ上で定義したカーソルによって、リモート テーブルの更新または削除ができます。詳細については、「分散クエリでのカーソルの使用」を参照してください。

  • READTEXT、WRITETEXT、および UPDATETEXT の各ステートメントは、リモート テーブルに対してはサポートされません。

  • SQL Server プロセスの外でプロバイダーがインスタンス化されている場合、プロバイダー オプション AllowInProcess が 0 に設定されていると、更新操作または挿入操作ではラージ オブジェクト データ型を含む列 (text、ntext、または image 型) を参照できません。詳細については、「分散クエリ用の OLE DB プロバイダの構成」を参照してください。

  • CREATE ステートメント、ALTER ステートメント、または DROP ステートメントなどのデータ定義言語ステートメントを、リンク サーバーに対して使用できません。

  • EXECUTE ステートメントでは、AT キーワードを使用して、パススルー コマンドをリンク サーバーに送信できます。ステートメントを実行できるかどうかは、リンク サーバーの RPC 構成と、リンク サーバーがステートメントの実行をサポートできるかどうかに依存します。

  • その他のデータベースレベルの操作またはステートメントをリンク サーバーで行うことはできません。

その他のガイドライン

その他の制限事項とガイドラインは次のとおりです。

  • STATIC カーソルまたは INSENSITIVE カーソルはリモート テーブルを参照できます。OLE DB プロバイダーが特定の必要条件を満たしている場合、KEYSET カーソルはリモート テーブルを参照できます。これらの要件の詳細については、「キーセット ドリブン カーソルを使用するための OLE DB プロバイダの要件」を参照してください。その他の種類のカーソルはリモート テーブルを参照できません。

  • ストアド プロシージャは、SQL Server データ ソースに対してのみサポートされます。

  • 接続で分散クエリを実行するには、その接続の ANSI_NULLS オプションと ANSI_WARNINGS オプションを前もってオンにしておく必要があります。詳細については、「SET ANSI_DEFAULTS (Transact-SQL)」を参照してください。

  • リンク サーバー上のテーブルを使っているときに最適なクエリ プランを作成するには、クエリ プロセッサがリンク サーバーからデータ分布統計のデータを取得する必要があります。テーブルの列に対するユーザーの権限が制限されていると、必要な統計情報を取得できるだけの十分な権限がないためにクエリ プランが非効率になり、高いパフォーマンスが得られない場合があります。リンク サーバーが SQL Server のインスタンスである場合、利用可能な統計情報をすべて取得するには、ユーザーがテーブルを所有しているか、リンク サーバーの固定サーバー ロール sysadmin、固定データベース ロール db_owner、または固定データベース ロール db_ddladmin のメンバーである必要があります。