分散クエリを使用する場合のガイドライン
必要な 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 のメンバである必要があります。