次の方法で共有


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

必要な 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 のメンバである必要があります。