FORCESEEKヒントを使用するクエリがあり、クエリを実行しているデータベースが存在するサーバーで正常に実行されます。別のサーバー(元のサーバーを対象とする)から同じ正確なクエリをリモートで実行しようとすると、次のエラーが発生します。
メッセージ7436、レベル16、状態1、行4テーブルまたはビュー 'TableBeingQueried'のFORCESEEKまたはFORCESCANヒントをリモートデータソースで使用できないため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを削除して、クエリを再送信してください。
T-SQLの例:
SELECT DISTINCT Table3.Field5
FROM Server1.Database1.Table1 AS T1
INNER JOIN Server1.Database1.Table2 AS T2 WITH (FORCESEEK) -- Index exists for T2.Field2
ON T1.Field1 = T2.Field2
INNER JOIN Server1.Database1.Table3 AS T3 WITH (FORCESEEK) -- Index exists for T3.Field3
ON T2.Field4 = T3.Field3
リモートデータソースでFROCESCANまたはFORCESEEKを使用することはできません。
リファレンス: ヒント(Transact-SQL)-テーブル
FORCESCANヒントには次の制限があります:
ヒントは、リモートデータソースには指定できません。
FORCESEEKヒントを使用する場合(インデックスパラメータの有無にかかわらず)、次のガイドラインを考慮してください:
ヒントは、リモートデータソースには指定できません。 FORCESEEKがインデックスヒントで指定されている場合はエラー7377が返され、インデックスヒントなしでFORCESEEKが使用されている場合はエラー8180が返されます。
OPENQUERY()
を使用して、リンクサーバーにクエリを実行し、FORCESEEK
/FORCESCAN
ヒントを適用できます。
例:
SELECT * FROM
OPENQUERY(
[Server1],
'SELECT DISTINCT Table3.Field5
FROM Server1.Database1.Table1 AS T1
INNER JOIN Server1.Database1.Table2 AS T2 WITH (FORCESEEK) -- Index exists for T2.Field2
ON T1.Field1 = T2.Field2
INNER JOIN Server1.Database1.Table3 AS T3 WITH (FORCESEEK) -- Index exists for T3.Field3
ON T2.Field4 = T3.Field3;');